我是 Python 的新手,我正在尝试将五个不同进程的结果保存到一个 Excel 文件中(每个进程都写入不同的工作表)。我已经阅读了这里的不同帖子,但仍然无法完成,因为我对于 pool.map、队列和锁非常困惑,而且我不确定在这里需要什么来完成此任务。 以下是目前我的代码:
list_of_days = ["2017.03.20", "2017.03.21", "2017.03.22", "2017.03.23", "2017.03.24"]
results = pd.DataFrame()
if __name__ == '__main__':
global list_of_days
writer = pd.ExcelWriter('myfile.xlsx', engine='xlsxwriter')
nr_of_cores = multiprocessing.cpu_count()
l = multiprocessing.Lock()
pool = multiprocessing.Pool(processes=nr_of_cores, initializer=init, initargs=(l,))
pool.map(f, range(len(list_of_days)))
pool.close()
pool.join()
def init(l):
global lock
lock = l
def f(k):
global results
*** DO SOME STUFF HERE***
results = results[ *** finished pandas dataframe *** ]
lock.acquire()
results.to_excel(writer, sheet_name=list_of_days[k])
writer.save()
lock.release()
结果是只有一个工作表被创建在Excel中(我认为这是最后完成的进程)。关于这段代码,有一些问题:
- 如何避免定义全局变量?
- 是否可能传递数据框?
- 我应该将锁定移到主要部分吗?
myfile.xlsx
。 - James