您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

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

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

通常,最常见的问题是创建了池但未将其关闭

我知道保证关闭池的最好方法是使用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)

python 2022/1/1 18:45:21 有301人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶