我运行带有multiprocessing.Pool()的python代码,所有进程一开始运行良好,但是所有进程都在几个小时后陷入睡眠状态 - python

我使用python 2.7和带有multiprocessing.Pool()的anaconda2运行python代码,并且使用了10个CPU工人。该代码从同一文件读取输入(仅以读取模式打开),并在某些处理后输出一些字符串,并且所有输出均被重定向到bash中带有'>'的同一文件。

该代码在centos服务器上运行,并在其中运行许多其他进程。最初,所有过程运行良好,但几个小时后陷入睡眠状态。这是进程的状态。

state of process

我使用strace命令查看正在休眠的进程,发现处于Sl状态的进程被futex(0x7f861071b000,FUTEX_WAIT,0,NULL锁定,而处于S状态的进程被futex(0x7f861071e000,FUTEX_WAIT,0, NULL,并且处于S状态的一个进程非常不同,它卡在read(3,,这是一个管道文件)中,所以我猜想多进程会死锁。

def run_multiprocess( parameter_list  ):
    results = []

    multiprocessing.freeze_support()
    pool = multiprocessing.Pool(processes=cpus)

    for parameter in parameter_list:
        result = pool.apply_async(HoloScope, args=parameter[0])
        results.append(result)
    pool.close()
    pool.join()

如果您能帮助我避免所有进程都进入休眠状态,将不胜感激。

参考方案

写入该管道的程序可能停止发送数据,并且对管道的读取调用将阻塞,直到请求的字节数可用或管道关闭为止。

我的猜测是,写入该管道的程序停止工作,并停止向其中写入数据,但是没有崩溃,因此该管道仍处于打开状态,这使得对其的读取调用将无限期地阻塞。您将不得不检查该程序发生了什么。我不知道您的确切设置,但是使用tee监视正在发送的内容可能会有所帮助。

还是这是程序的预期行为,并且如果python代码在输入中检测到特定条件,它应该已经关闭了管道?没有更多细节就无法确定。

Python sqlite3数据库已锁定 - python

我在Windows上使用Python 3和sqlite3。我正在开发一个使用数据库存储联系人的小型应用程序。我注意到,如果应用程序被强制关闭(通过错误或通过任务管理器结束),则会收到sqlite3错误(sqlite3.OperationalError:数据库已锁定)。我想这是因为在应用程序关闭之前,我没有正确关闭数据库连接。我已经试过了: connectio…

Python-Excel导出 - python

我有以下代码:import pandas as pd import requests from bs4 import BeautifulSoup res = requests.get("https://www.bankier.pl/gielda/notowania/akcje") soup = BeautifulSoup(res.cont…

Python:传递记录器是个好主意吗? - python

我的Web服务器的API日志如下:started started succeeded failed 那是同时收到的两个请求。很难说哪一个成功或失败。为了彼此分离请求,我为每个请求创建了一个随机数,并将其用作记录器的名称logger = logging.getLogger(random_number) 日志变成[111] started [222] start…

Python pytz时区函数返回的时区为9分钟 - python

由于某些原因,我无法从以下代码中找出原因:>>> from pytz import timezone >>> timezone('America/Chicago') 我得到:<DstTzInfo 'America/Chicago' LMT-1 day, 18:09:00 STD…

用大写字母拆分字符串,但忽略AAA Python Regex - python

我的正则表达式:vendor = "MyNameIsJoe. I'mWorkerInAAAinc." ven = re.split(r'(?<=[a-z])[A-Z]|[A-Z](?=[a-z])', vendor) 以大写字母分割字符串,例如:'我的名字是乔。 I'mWorkerInAAAinc”变成…