通常,最常见的问题是创建了池但未将其关闭。
我知道保证关闭池的最好方法是使用try / finally子句:
try: pool = Pool(ncores) pool.map(yourfunction, arguments) finally: pool.close() pool.join()
@H_502_7@如果您不想挣扎
multiprocessing
,我写了一个简单的程序包parmap
,它包装了多处理程序,使我(甚至可能是您)的生活更加轻松。
pip install parmap
import parmap parmap.map(yourfunction, arguments)
@H_502_7@在parmap使用情况部分:
-
简单的并行示例:
import parmap
@H_502_7@y1 = [myfunction(x, argument1, argument2) for x in mylist] y2 = parmap.map(myfunction, mylist, argument1, argument2) y1 == y2
-
遍历元组列表:
# You want to do:
@H_502_7@z = [myfunction(x, y, argument1, argument2) for (x,y) in mylist] z = parmap.starmap(myfunction, mylist, argument1, argument2)
You want to do:
listx = [1, 2, 3, 4, 5, 6] listy = [2, 3, 4, 5, 6, 7] param = 3.14 param2 = 42 listz = [] for (x, y) in zip(listx, listy): listz.append(myfunction(x, y, param1, param2))
In parallel:
listz = parmap.starmap(myfunction, zip(listx, listy), param1, param2)
解决方法
我一直在使用工人池来实现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)
但是,在运行了一段时间后,我的应用程序又运行了很多后台程序。这是为我的应用程序执行ps aux后的快照
现在,我已经阅读了很多关于类似问题,例如如何杀死由多处理模块创建的僵尸进程?这就要求使用已经实现的.join(),并且我在这里从Python Multiprocessing Kill
Processs中了解了如何杀死所有这些进程。但是我想知道我的代码可能出什么毛病。我无法在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
我对并行编程和调试问题的概念仍然很陌生,事实证明它很棘手,任何帮助将不胜感激。
import parmap parmap.map(yourfunction, arguments)
@H_502_7@在parmap使用情况部分:
-
简单的并行示例:
import parmap
@H_502_7@y1 = [myfunction(x, argument1, argument2) for x in mylist] y2 = parmap.map(myfunction, mylist, argument1, argument2) y1 == y2
-
遍历元组列表:
# You want to do:
@H_502_7@z = [myfunction(x, y, argument1, argument2) for (x,y) in mylist] z = parmap.starmap(myfunction, mylist, argument1, argument2)
You want to do:
listx = [1, 2, 3, 4, 5, 6] listy = [2, 3, 4, 5, 6, 7] param = 3.14 param2 = 42 listz = [] for (x, y) in zip(listx, listy): listz.append(myfunction(x, y, param1, param2))
In parallel:
listz = parmap.starmap(myfunction, zip(listx, listy), param1, param2)
解决方法
我一直在使用工人池来实现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)
但是,在运行了一段时间后,我的应用程序又运行了很多后台程序。这是为我的应用程序执行ps aux后的快照
现在,我已经阅读了很多关于类似问题,例如如何杀死由多处理模块创建的僵尸进程?这就要求使用已经实现的.join(),并且我在这里从Python Multiprocessing Kill
Processs中了解了如何杀死所有这些进程。但是我想知道我的代码可能出什么毛病。我无法在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
我对并行编程和调试问题的概念仍然很陌生,事实证明它很棘手,任何帮助将不胜感激。
import parmap
@H_502_7@y1 = [myfunction(x, argument1, argument2) for x in mylist] y2 = parmap.map(myfunction, mylist, argument1, argument2) y1 == y2
# You want to do:
@H_502_7@z = [myfunction(x, y, argument1, argument2) for (x,y) in mylist] z = parmap.starmap(myfunction, mylist, argument1, argument2)
You want to do:
listx = [1, 2, 3, 4, 5, 6] listy = [2, 3, 4, 5, 6, 7] param = 3.14 param2 = 42 listz = [] for (x, y) in zip(listx, listy): listz.append(myfunction(x, y, param1, param2))
In parallel:
listz = parmap.starmap(myfunction, zip(listx, listy), param1, param2)
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)
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
如果您不想挣扎multiprocessing
,我写了一个简单的程序包parmap
,它包装了多处理程序,使我(甚至可能是您)的生活更加轻松。
pip install parmap
在parmap使用情况部分:
简单的并行示例:
y1 = [myfunction(x, argument1, argument2) for x in mylist] y2 = parmap.map(myfunction, mylist, argument1, argument2) y1 == y2
遍历元组列表:
z = [myfunction(x, y, argument1, argument2) for (x,y) in mylist] z = parmap.starmap(myfunction, mylist, argument1, argument2)
listx = [1, 2, 3, 4, 5, 6] listy = [2, 3, 4, 5, 6, 7] param = 3.14 param2 = 42 listz = [] for (x, y) in zip(listx, listy): listz.append(myfunction(x, y, param1, param2))
listz = parmap.starmap(myfunction, zip(listx, listy), param1, param2)
我一直在使用工人池来实现python的多处理库。我实现了以下代码
但是,在运行了一段时间后,我的应用程序又运行了很多后台程序。这是为我的应用程序执行ps aux后的快照
现在,我已经阅读了很多关于类似问题,例如如何杀死由多处理模块创建的僵尸进程?这就要求使用已经实现的.join(),并且我在这里从Python Multiprocessing Kill
Processs中了解了如何杀死所有这些进程。但是我想知道我的代码可能出什么毛病。我无法在main1函数中共享我的所有代码,但是我将整个代码块放在try
catch块中,以避免主代码中的错误可能导致僵尸进程的情况。
我对并行编程和调试问题的概念仍然很陌生,事实证明它很棘手,任何帮助将不胜感激。
如果您不想挣扎multiprocessing
,我写了一个简单的程序包parmap
,它包装了多处理程序,使我(甚至可能是您)的生活更加轻松。
pip install parmap
import parmap parmap.map(yourfunction, arguments)
@H_502_7@在parmap使用情况部分:
-
简单的并行示例:
import parmap
@H_502_7@y1 = [myfunction(x, argument1, argument2) for x in mylist] y2 = parmap.map(myfunction, mylist, argument1, argument2) y1 == y2
-
遍历元组列表:
# You want to do:
@H_502_7@z = [myfunction(x, y, argument1, argument2) for (x,y) in mylist] z = parmap.starmap(myfunction, mylist, argument1, argument2)
You want to do:
listx = [1, 2, 3, 4, 5, 6] listy = [2, 3, 4, 5, 6, 7] param = 3.14 param2 = 42 listz = [] for (x, y) in zip(listx, listy): listz.append(myfunction(x, y, param1, param2))
In parallel:
listz = parmap.starmap(myfunction, zip(listx, listy), param1, param2)
解决方法
我一直在使用工人池来实现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)
但是,在运行了一段时间后,我的应用程序又运行了很多后台程序。这是为我的应用程序执行ps aux后的快照
现在,我已经阅读了很多关于类似问题,例如如何杀死由多处理模块创建的僵尸进程?这就要求使用已经实现的.join(),并且我在这里从Python Multiprocessing Kill
Processs中了解了如何杀死所有这些进程。但是我想知道我的代码可能出什么毛病。我无法在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
我对并行编程和调试问题的概念仍然很陌生,事实证明它很棘手,任何帮助将不胜感激。
import parmap
@H_502_7@y1 = [myfunction(x, argument1, argument2) for x in mylist] y2 = parmap.map(myfunction, mylist, argument1, argument2) y1 == y2
# You want to do:
@H_502_7@z = [myfunction(x, y, argument1, argument2) for (x,y) in mylist] z = parmap.starmap(myfunction, mylist, argument1, argument2)
You want to do:
listx = [1, 2, 3, 4, 5, 6] listy = [2, 3, 4, 5, 6, 7] param = 3.14 param2 = 42 listz = [] for (x, y) in zip(listx, listy): listz.append(myfunction(x, y, param1, param2))
In parallel:
listz = parmap.starmap(myfunction, zip(listx, listy), param1, param2)
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)
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
在parmap使用情况部分:
简单的并行示例:
y1 = [myfunction(x, argument1, argument2) for x in mylist] y2 = parmap.map(myfunction, mylist, argument1, argument2) y1 == y2
遍历元组列表:
z = [myfunction(x, y, argument1, argument2) for (x,y) in mylist] z = parmap.starmap(myfunction, mylist, argument1, argument2)
listx = [1, 2, 3, 4, 5, 6] listy = [2, 3, 4, 5, 6, 7] param = 3.14 param2 = 42 listz = [] for (x, y) in zip(listx, listy): listz.append(myfunction(x, y, param1, param2))
listz = parmap.starmap(myfunction, zip(listx, listy), param1, param2)
我一直在使用工人池来实现python的多处理库。我实现了以下代码
但是,在运行了一段时间后,我的应用程序又运行了很多后台程序。这是为我的应用程序执行ps aux后的快照
现在,我已经阅读了很多关于类似问题,例如如何杀死由多处理模块创建的僵尸进程?这就要求使用已经实现的.join(),并且我在这里从Python Multiprocessing Kill
Processs中了解了如何杀死所有这些进程。但是我想知道我的代码可能出什么毛病。我无法在main1函数中共享我的所有代码,但是我将整个代码块放在try
catch块中,以避免主代码中的错误可能导致僵尸进程的情况。
我对并行编程和调试问题的概念仍然很陌生,事实证明它很棘手,任何帮助将不胜感激。
在parmap使用情况部分:
简单的并行示例:
import parmap
@H_502_7@y1 = [myfunction(x, argument1, argument2) for x in mylist] y2 = parmap.map(myfunction, mylist, argument1, argument2) y1 == y2
y1 = [myfunction(x, argument1, argument2) for x in mylist] y2 = parmap.map(myfunction, mylist, argument1, argument2) y1 == y2
y1 = [myfunction(x, argument1, argument2) for x in mylist] y2 = parmap.map(myfunction, mylist, argument1, argument2) y1 == y2
遍历元组列表:
# You want to do:
@H_502_7@z = [myfunction(x, y, argument1, argument2) for (x,y) in mylist] z = parmap.starmap(myfunction, mylist, argument1, argument2)
You want to do:
listx = [1, 2, 3, 4, 5, 6] listy = [2, 3, 4, 5, 6, 7] param = 3.14 param2 = 42 listz = [] for (x, y) in zip(listx, listy): listz.append(myfunction(x, y, param1, param2))
In parallel:
listz = parmap.starmap(myfunction, zip(listx, listy), param1, param2)
z = [myfunction(x, y, argument1, argument2) for (x,y) in mylist] z = parmap.starmap(myfunction, mylist, argument1, argument2)
listx = [1, 2, 3, 4, 5, 6] listy = [2, 3, 4, 5, 6, 7] param = 3.14 param2 = 42 listz = [] for (x, y) in zip(listx, listy): listz.append(myfunction(x, y, param1, param2))
listz = parmap.starmap(myfunction, zip(listx, listy), param1, param2)
z = [myfunction(x, y, argument1, argument2) for (x,y) in mylist] z = parmap.starmap(myfunction, mylist, argument1, argument2)
listx = [1, 2, 3, 4, 5, 6] listy = [2, 3, 4, 5, 6, 7] param = 3.14 param2 = 42 listz = [] for (x, y) in zip(listx, listy): listz.append(myfunction(x, y, param1, param2))
listz = parmap.starmap(myfunction, zip(listx, listy), param1, param2)