可能是我的问题看起来很简单(或者错误可能很小),但我无法找到错误,真的我费了很大劲才弄清楚这个问题。
我已经创建了一个框架来使用简单的 Salesforce 包从 Salesforce 中提取数据,但是当我使用多处理时遇到了这个错误。
我的代码非常简单,但很乏味。我不想在这里粘贴整个代码,所以这是我的 GitHub中的代码。
问题:
当我使用 Pool 调用此Extract Data 函数时,其中的变量__name__ == '__main__'
不起作用。
换句话说,我得到了NameError: name 'SFAPI' is not defined - 但它作为全局变量存在于主目录中,并且它在没有池的情况下工作(一次调用)。
执行示例:
python "E:\Documents\myPy\SF Project\sf_extraction.py" -pr data_extraction -tn Opportunity Account
我的代码中的小片段,我遇到了问题:
def ExtractData(table_name):
logging.info('Extract Data for Table Name: ' + table_name + ' at ' + getCurrDatetime())
try:
rec_count = getRecordCount(table_name)
print(rec_count)
if int(rec_count) == 0:
logging.info('There is no data to Extract for {}'.format(table_name))
else:
soql = SFAPI.CreateSOQL(table_name)
data = SFAPI.ExecuteSOQL(soql, is_count=0)
extract_file_nm = table_name + '_' + db_name + '_' + sc_name + '_' + curr_datetime + '.csv'
print(data)
print(type(data))
extract_file = os.path.expanduser(os.path.join(script_path,extract_file_nm))
data.to_csv(extract_file, index=False)
logging.info('Data has been extrcated as {} at {}'.format(extract_file, getCurrDatetime()))
except Exception as e:
logging.info('Error in Extraction')
err_msg = "FATAL_ERROR: In the ExtractData Function : {0}\n\n{1}".format(e, traceback.format_exc())
raise Exception(str(err_msg))
我称之为的地方或片段:
if __name__ == '__main__':
try:
SFAPI = SalesforceAPICall(username=config['username'],
password=config['password'],
security_token=config['sf_token'],
)
if len(table_name) != 0 and 'data_extraction' in process_nm:
try:
if len(table_name) == 1:
print(table_name[0])
ExtractData(table_name[0])
if type(table_name) == list and len(table_name) > 1:
#p = Pool(processes=int(processes))
print('Calling Pool : ' + str(os.cpu_count()))
#out = p.map(ExtractData, table_name)
#p.close()
#p.join()
p = Pool()
print(table_name)
x = p.map(ExtractData, table_name)
x.get()
p.close()
p.join()
except Exception as e:
if len(table_name) > 1:
p.terminate()
p.join()
logging.error("Process Failed - " + str(e))
except Exception as e:
chk_err('FATAL_ERROR: ' + " from main exception : {0}\n\n{1}".format(e, traceback.format_exc()))
如果我在 GitHub 上的代码看起来很笨拙,或者你觉得这部分信息不足以修复,你可以很好地参考我的代码。
同样,它可能是一个小错误,希望您能理解我要传达的内容!!!提前致谢 !!!
问候, Parvathirajan Natarajan