python不同文件函数调用_不同输入文件的多处理调用函数

当进行多处理时,每个子进程都会获得主模块中在if __name__ == '__main__':语句之前定义的所有全局变量的副本。{{cdm>中访问的每个进程都将是不同的。在

一种解决方法是使用共享列表,而共享列表又需要一个SyncManager来同步进程之间对共享资源的访问(这是通过调用multiprocessing.Manager()创建的)。然后使用它创建一个列表,在下面的代码中存储结果(我将其命名为matches,而不是match)。在

我还必须使用functools.partial()创建一个可以从修改后的link_match函数中调用的单个参数,该函数现在接受两个参数,而不是一个(这是pool.map()期望的那种)。在from functools import partial

import glob

import multiprocessing

def link_match(matches, file): # note: added results list argument

links = json.load(file)

for link in links:

try:

for other_link in other_links:

if link['data'] == other_link['data']:

matches.append(link)

else:

pass

else:

print "not found"

if __name__ == '__main__':

manager = multiprocessing.Manager() # create SyncManager

matches = manager.list() # create a shared list here

link_matches = partial(link_match, matches) # create one arg callable to

# pass to pool.map()

pool = multiprocessing.Pool(processes=6)

list_files = glob.glob("/path/*.json") # only used here

pool.map(link_matches, list_files) # apply partial to files list

pool.close()

pool.join()

print(matches)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值