繁体   English   中英

Python多重处理-apply_async无法正常工作

[英]Python multiprocessing - apply_async not working

我正在尝试使用ThreadPool并行化代码。 我目前正在Windows上工作。 基本上,我得到的行为是,当我调用apply_async时,什么也没有发生。 我的程序只打印开始和结束。

下面是一个示例:

import glob
import itertools
import pandas as pd
from multiprocessing.dummy import Pool as ThreadPool 


def ppp(window,day):
    print(window,day)


#%% Reading datasets
print('START')
tree = pd.read_csv('datan\\days.csv')
days = list(tree.columns)
windows = [2000]
processes_args = list(itertools.product(windows, days))


pool = ThreadPool(8) 
results = pool.apply_async(ppp, processes_args)
pool.close() 
pool.join() 
print('END')

堆栈上有很多问题建议建议调用其他方法,例如imap_unordered,map,apply。 但是,它们都不能解决问题。

编辑:

results.get()

返回有关参数数量的错误:

TypeError: ppp() takes 2 positional arguments but 10 were given

但是,文档指出我可以使用元组列表来传递参数,否则如何传递它们?

EDIT2:

在调用apply_async之前, processes_args看起来像下面的输出:

[(2000, '0808'),
 (2000, '0810'),
 (2000, '0812'),
 (2000, '0813'),
 (2000, '0814'),
 (2000, '0817'),
 (2000, '0818'),
 (2000, '0827'),
 (2000, '0828'),
 (2000, '0829')]

使用* Pool.apply_async 语法扩展Pool.applyPool.apply_async中的位置参数。

processed_args内容,你ppp当通过调度功能会得到10元组apply_async

如果要处理可迭代对象,建议您使用Pool.mapPool.map_async map函数不会在iterable中扩展参数。 您需要自己照顾它。

def ppp(element):
    window, day = element
    print(window, day)

pool.map(ppp, processed_args)

如果您希望保持ppp函数不变,则可以使用Pool.starmap ,它将对迭代器内容应用参数扩展。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM