Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python “防止多重处理”;“逃跑的虫子”;_Python_Windows_Linux_Multiprocessing_Process - Fatal编程技术网

Python “防止多重处理”;“逃跑的虫子”;

Python “防止多重处理”;“逃跑的虫子”;,python,windows,linux,multiprocessing,process,Python,Windows,Linux,Multiprocessing,Process,如果您使用多处理并意外地结束,操作系统将不喜欢它 是否有任何简单的解决方案可以防止这种情况发生(例如,通过限制Python或OS中的进程总数) 我使用Windows,当我犯这样的错误时,它的表现非常糟糕(需要硬重启)。因此,如果有一些代码可以包装/添加到我的应用程序中并防止这种情况发生,我会很高兴。在Linux上,您可以使用syscall(带有RLIMIT\u NPROC)来限制进程的数量(例如,避免)。此系统调用通过bash(或zshlimit)内置接口连接。Python对这个系统调用有一些限

如果您使用多处理并意外地结束,操作系统将不喜欢它

是否有任何简单的解决方案可以防止这种情况发生(例如,通过限制Python或OS中的进程总数)

我使用Windows,当我犯这样的错误时,它的表现非常糟糕(需要硬重启)。因此,如果有一些代码可以包装/添加到我的应用程序中并防止这种情况发生,我会很高兴。在Linux上,您可以使用syscall(带有
RLIMIT\u NPROC
)来限制进程的数量(例如,避免)。此系统调用通过bash(或zsh
limit
)内置接口连接。Python对这个系统调用有一些限制


我不知道Windows下是否存在类似的功能。

您可以创建一个短的“trip wire”类型模块,并将其导入多处理。如果跳闸线模块检测到多处理无限循环,将引发异常

我的看起来像这样:

#mp_guard.py
"""tracks invocation by creating an environment variable; if that
variable exists when next called a loop is in progress"""

import os

class Brick(Exception):
    def __init__(self):
        Exception.__init__(self, "Your machine just narrowly avoided becoming"
                                 " a brick!")

if 'MP_GUARD' in os.environ:
    raise Brick

os.environ['MP_GUARD'] = 'active'
在main.py文件中:

import mp_guard

在windows上,您可以创建“作业”,我不是python方面的专家,所以我不知道是否有创建windows作业的绑定。Windows API函数是CreateJobObject。作业对象(在某种程度上)相当于Unix“进程组”。您可以将某些限制作为一个整体应用于作业对象,也可以单独应用于每个进程(例如,作业中的最大进程)。您可以创建作业对象,为其指定进程数限制,然后将自己的进程分配给作业对象。您可能正在寻找的是CreateJobObject、SetInformationJobObject+JOBOBJECT\u基本\u限制\u信息+作业\u限制\u活动\u进程。再次声明:这是Windows API,我不确定是否有与这些函数相关的python“绑定”。

据我所知,Windows不存在任何东西。。。对他们来说太糟糕了:-(如果是这样的话,它确实很糟糕。即使Windows进入关闭模式,它似乎也无法阻止进程的扩散。你可能会认为Win 7在试图关闭时很容易阻止任何新的用户创建的进程……Linux没有遇到这个问题。如果这是一个Windows问题-为什么它会标记为Linux?因为理想情况下我想不是Linux的解决方案,也不是Windows的解决方案!抱歉,我不清楚这一点…显然,50%的解决方案仍然比没有好。