Man*_*nas 6 python multithreading timer multiprocessing
因此,threading
模块有一个Timer
类从Thread
类中反复执行某些任务.
我想知道为什么多处理模块没有类似于类似的TimedProcess
类,例如,它是否Process
反复执行某些任务?
可以编写这样一个定时的过程,我写了一个,但仍然很好奇.或者我错过了什么?
实现自己非常简单:
from multiprocessing import Process, Event
class Timer(Process):
def __init__(self, interval, function, args=[], kwargs={}):
super(Timer, self).__init__()
self.interval = interval
self.function = function
self.args = args
self.kwargs = kwargs
self.finished = Event()
def cancel(self):
"""Stop the timer if it hasn't finished yet"""
self.finished.set()
def run(self):
self.finished.wait(self.interval)
if not self.finished.is_set():
self.function(*self.args, **self.kwargs)
self.finished.set()
Run Code Online (Sandbox Code Playgroud)
我不确定为什么stdlib中没有一个.也许是因为它不太可能有用?
这是一个相当开放的问题,字面上的答案不会很有用.
但是,让我们尝试提出一些有根据的猜测.
pyprocessing
*没有它.为什么不?可能是因为它不是特别有用.
几乎任何需要计时器的非平凡应用程序都需要多个计时器,重复计时器,相对快速的计时器等.为每个定时事件启动一个新线程是一个糟糕的主意.
那么,为什么它甚至在threading
?
好吧,对于琐碎的应用程序,它实际上是有用的.添加threading
到单个进程应用程序并不是不合理的,因此您可以启动一个Timer
信号来发出主线程,并在它丢失时中断它,例如.但那与之无关multiprocessing
.
此外,threading
其中一个模块被设计为可用作示例代码,而不仅仅是一个库 - 在首次添加时尤其如此.这就是文档链接到源的原因.并且它Timer
是一个很好的示例代码 - 它的作用和工作方式很明显,而且很难想象可以演示如何使用同步对象的更简单的东西.但是你不需要两个地方的代码作为例子,并且没有任何额外的和多处理特定的演示.
最后,Itamar Shtull-Trauring想要它,完成了工作并提供了它,没有人反对把它包括在内; 大概同样的事情从未发生过pyprocessing
.**
在2.6/3.0规划期间,PEP 371适用pyprocessing
于stdlib multiprocessing
模块.这是一个相当艰巨的任务,并在有点仓促完成的,特别是因为他们采取了对PEP8-ifying了名称中的任务threading
,这样他们就不必重命名所有的pyprocessing
,以匹配非标准名称threading
只为有人在threading
一两年后修复后重新将它们全部重命名.因此,尽管作为threading
次要目标的替代品是次要目标之一,但我猜测没有人做过完整的调查以确保完成.
从那时起,据推测,要么没有人注意到它丢失并建议它,或者没有人做出足够引人注目的论证,或者没有人做过实际的工作.如果您认为应该添加它,并且可以捍卫您的信念,创建错误或写入python-ideas,并包含您的实现,并签署PSF贡献者的协议,它可能会让您永生.:)
*不幸的是,我找不到任何好的历史链接pyprocessing
.源代码已经死了,贡献者继续维护stdlib multiprocessing
模块和PyPI反向multiprocessing
端口,即使该项目已被大部分取代billiard
,并且在此期间,一个新的和不相关的项目取代了原来的名称......
**请注意,问题#428326,Timer
首先提出的地方,超过一半的理由是它是很好的示例代码.
归档时间: |
|
查看次数: |
4114 次 |
最近记录: |