我还有一个关于Python多处理的问题。我有一个模块,它创建了一个进程,并在while-True循环中运行。此模块将从另一个Python模块启用/禁用。另一个模块将导入第一个模块一次,并作为进程运行。
我该如何更好地实现这一点?
因此,作为参考:
#foo.py
def foo():
while True:
if enabled:
#do something
p = Process(target=foo)
p.start()
想象第二个模块是这样的:
#bar.py
import foo, time
def bar():
while True:
foo.enable()
time.sleep(10)
foo.disable()
Process(target=bar).start()
不断地运行一个流程来检查循环中的条件似乎是一种浪费,但我很乐意接受这样的解决方案,它只允许我从外部设置enabled
值。理想情况下,我希望能够终止并重新启动流程,再次从该模块外部开始。据我所知,我将使用队列向进程传递命令。如果确实是这样,有人能告诉我如何设置它,我可以从不同的模块向队列添加一些东西吗。
这甚至可以用Python轻松完成吗,或者是时候放弃希望,切换到像C或Java
我在评论中提出了两种不同的方法:
的共享变量。值
def target_process_1(run_statement):
while True:
if run_statement.value:
print "I'm running !"
time.sleep(1)
def target_process_2(run_statement):
time.sleep(3)
print "Stoping"
run_statement.value = False
time.sleep(3)
print "Resuming"
run_statement.value = True
if __name__ == "__main__":
run_statement = Value("i", 1)
process_1 = Process(target=target_process_1, args=(run_statement,))
process_2 = Process(target=target_process_2, args=(run_statement,))
process_1.start()
process_2.start()
time.sleep(8)
process_1.terminate()
process_2.terminate()
from multiprocessing import Process
import time
import os, signal
def target_process_1():
while True:
print "Running !"
time.sleep(1)
def target_process_2(target_pid):
time.sleep(3)
os.kill(target_pid, signal.SIGSTOP)
time.sleep(3)
os.kill(target_pid, signal.SIGCONT)
if __name__ == "__main__":
process_1 = Process(target=target_process_1)
process_1.start()
process_2 = Process(target=target_process_2, args=(process_1.pid,))
process_2.start()
time.sleep(8)
process_1.terminate()
process_2.terminate()
旁注:如果可能,在为True时不要运行。
编辑:如果您想在两个不同的文件中管理流程,假设您想通过共享变量来使用控件,这是一种方法。
# file foo.py
from multiprocessing import Value, Process
import time
__all__ = ['start', 'stop', 'pause', 'resume']
_statement = None
_process = None
def _target(run_statement):
""" Target of the foo's process """
while True:
if run_statement.value:
print "I'm running !"
time.sleep(1)
def start():
global _process, _statement
_statement = Value("i", 1)
_process = Process(target=_target, args=(_statement,))
_process.start()
def stop():
global _process, _statement
_process.terminate()
_statement, _process = None, _process
def enable():
_statement.value = True
def disable():
_statement.value = False
主要内容:1. 主进程和工作进程,2. 控制NGINX本节介绍NGINX在运行时启动的过程以及如何控制它们。 在这个部分中,主要涉及两个部分的内容: 主进程和工作进程 控制NGINX 1. 主进程和工作进程 NGINX有一个主进程和一个或多个工作进程。 如果启用缓存,缓存加载程序和缓存管理器进程也将在启动时运行。 主程序的主要目的是读取和评估配置文件以及维护工作进程。 工作进程执行请求的实际处理。 NGINX依赖于操作系统的机制来有效地在工作进程之间
我使用一个Runnable对象来运行processCommand并执行一些需要一定时间的处理(我们称之为insideprocess)。在insideprocess的末尾,它将向文本文件写入一些内容。其思想是,如果在指定的时间内insideprocess仍未完成,则必须将其杀死,因此我使用ExecutorService来处理它。但是如果insideprocess早于指定时间完成,它将中断Execut
问题内容: 我正在学习如何使用Python多处理库。但是,当我浏览一些示例时,最终我在后台运行了许多python进程。 其中的例子看起来象下面这样: 现在,这是我的“ TOP”命令的屏幕截图: 我不知道如何一口气杀死他们。 ps … | grep python ....杀死吗? 我需要添加哪种python代码,以避免再次发生这种悲惨的情况。谢谢! 问题答案: 您需要在工作队列中处理您的进程,该进程
问题内容: 如果对某些人来说这太简单了,我感到抱歉,但是我仍然不了解python的多处理技巧。我已经阅读了 http://docs.python.org/dev/library/multiprocessing http://pymotw.com/2/multiprocessing/basics.html 以及Google给我的许多其他教程和示例…其中许多从这里也是。 好吧,我的情况是我必须计算许多
进展的相关属性和扩展管理 进程: 主进程, 渲染进程 Electron 中的 process 对象是Node.js的process 对象 的扩展。 事件 事件: 'loaded' 触发:Electron加载其内部预置脚本并开始载入网页或主脚本时 当Node关闭时,预置脚本可以用loaded将 原本已删除的Node全局符号 重新添加回 全局范围: 1 // 预置脚本 2 const _setImm
fork 新建一个子进程。具有一次调用,两次返回的特点。 evecve 有6种表达: