在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) 我试图使用部分函数,以便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的多处理库.我实现了以下代码
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)
我对并行编程和调试问题的概念还很陌生,结果很棘手.非常感谢任何帮助.