The variable SCRIPT_ENV gets set correctly in main block but that value does not propagate to other functions. Here's my full working code:
import argparse
import settings
from multiprocessing import Pool
def set_brokers_and_cert_path():
    brokers = None
    cert_full_path = None
    print("I am here man\n\n {0}".format(settings.SCRIPT_ENV))
    if settings.SCRIPT_ENV == "some value":
        brokers = # use these brokers
        cert_full_path = settings.BASE_CERT_PATH + "test_env/"
    if settings.SCRIPT_ENV == "some other value":
        brokers = # use those brokers
        cert_full_path = settings.BASE_CERT_PATH + "new_env/"
    return brokers, cert_full_path
def func_b(partition):
    kafka_brokers, cert_full_path = set_brokers_and_cert_path()
    producer = KafkaProducer(bootstrap_servers=kafka_brokers,
                             security_protocol='SSL',
                             ssl_check_hostname=True,
                             ssl_cafile=cert_full_path +'cacert.pem',
                             ssl_certfile=cert_full_path + 'certificate.pem',
                             ssl_keyfile=cert_full_path + 'key.pem',
                             max_block_ms=1200000,
                             value_serializer=lambda v: json.dumps(v).encode('utf-8'),
                             key_serializer=str.encode
                             )
    try:
        producer.send(settings.KAFKA_TOPIC,
                      value="some val",
                      key="some key",
                      timestamp_ms=int(time.time()),
                      headers=[some headers],
                      partition=partition)
        producer.flush()
    except AssertionError as e:
        print("Error in partition: {0}, {1}".format(partition, e))
def main():
  with Pool(settings.NUM_PROCESSES) as p:
    p.map(func_b, [i for i in range(0, 24)])
if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("--env", help="Environment against which the script needs to run")
    args = parser.parse_args()
    if args.env:
        settings.SCRIPT_ENV = args.env
        main()
    else:
        raise Exception("Please pass env argument. Ex: --env test/accept")
In the line "I am here man", it prints None as the value of SCRIPT_ENV.
Here, SCRIPT_ENV gets set perfectly in the if __name__ == "__main__" block, but in func_a, it comes as None.
contents of settings.py:
KAFKA_TOPIC = "some topic"
NUM_PROCESSES = 8
NUM_MESSAGES = 1000
SCRIPT_ENV = None
NUM_PARTITIONS = 24
TEST_BROKERS = [some brokers]
ACCEPT_BROKERS = [some brokers]
BASE_CERT_PATH = "base path"
I run it like this:
python <script.py> --env <value>
 
    