相关疑难解决方法(0)

用于多个参数的Python多处理pool.map

在Python多处理库中,是否有pool.map的变体支持多个参数?

text = "test"
def harvester(text, case):
    X = case[0]
    text+ str(X)

if __name__ == '__main__':
    pool = multiprocessing.Pool(processes=6)
    case = RAW_DATASET
    pool.map(harvester(text,case),case, 1)
    pool.close()
    pool.join()
Run Code Online (Sandbox Code Playgroud)

python multiprocessing

458
推荐指数
14
解决办法
40万
查看次数

Python在进程之间共享锁定

我试图使用部分函数,​​以便pool.map()可以定位具有多个参数的函数(在本例中为Lock()对象).

这是示例代码(取自我之前的一个问题的答案):

from functools import partial

def target(lock, iterable_item):
    for item in items:
        # Do cool stuff
        if (... some condition here ...):
            lock.acquire()
            # Write to stdout or logfile, etc.
            lock.release()

def main():
    iterable = [1, 2, 3, 4, 5]
    pool = multiprocessing.Pool()
    l = multiprocessing.Lock()
    func = partial(target, l)
    pool.map(func, iterable)
    pool.close()
    pool.join()
Run Code Online (Sandbox Code Playgroud)

但是,当我运行此代码时,我收到错误:

Runtime Error: Lock objects should only be shared between processes through inheritance.
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?如何在子进程之间共享锁?

python share locking multiprocessing

41
推荐指数
1
解决办法
4万
查看次数

Python多处理导致许多僵尸进程

我一直在使用工作池来实现python的多处理库.我实现了以下代码

import main1
t1 = time.time()
p = Pool(cores) 
result = p.map(main1, client_list[client])
if result == []:
    return []
p.close()
p.join()
print "Time taken in performing request:: ", time.time()-t1
return shorted(result)
Run Code Online (Sandbox Code Playgroud)

但是,在运行该过程一段时间后,我得到了很多运行我的应用程序的后台进程.这是为我的应用程序做ps aux之后的快照

显示所有僵尸进程的快照

现在,我已经在stackoverflow上阅读了很多类似的问题,比如如何杀死多处理模块创建的僵尸进程?它要求使用我已经实现的.join(),并且我从这里学习了如何从Python Multiprocessing Kill Processes中杀死所有这些进程.但我想知道我的代码可能出错的地方.我无法在main1函数中共享所有代码,但是我已将整个代码块放在try catch块中,以避免主代码中的错误导致僵尸进程的情况.

def main1((param1, param2, param3)):
    try:
       resout.append(some_data) //resout in case of no error
    except:
        print traceback.format_exc()
        resout = []  //sending empty resout in case of error
    return resout
Run Code Online (Sandbox Code Playgroud)

我对并行编程和调试问题的概念还很陌生,结果很棘手.非常感谢任何帮助.

python multiprocessing

10
推荐指数
1
解决办法
5849
查看次数

标签 统计

multiprocessing ×3

python ×3

locking ×1

share ×1