multithreading - 在 python 模块多处理中,多线程为什么没有定时器类?

  显示原文与译文双语对照的内容

因此 threading 模块有一个 Timer 类 inhereted,从 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()



我不确定为什么stdlib中包含了一个。 也许因为它不太有用?

原作者:

这是一个非常开放的问题,字面答案是不太有用的。

但是让我们尝试一些有价值的猜测。

pyprocessing * 没有它。 为什么不可能是因为它没有特别有用。

几乎任何需要计时器的非线性应用都需要多个计时器,定时器,相对快的计时器。

那么为什么在 threading 里?

好吧对于那些的应用程序,它实际上是有用的。 只要将 threading 添加到单个进程应用程序,就可以将 Timer 输入到主线程信号中,如果丢失了。 但这与 multiprocessing 无关。

这里外,threading 是这些模块之一,它作为示例代码,而不仅仅是 true 中的library—and 。 这就是为什么文档链接到的原因。Timer 是一个很明显的示例 code—it,它是明显的,它是如何工作的,很难想象如何使用同步对象。 但是,你不需要两个地方的代码作为例子,并且没有什么特别的和多处理的。

最后,Itamar shtull trauring想要它,工作,并提供它,没有人反对包括它,可能是同样的事情,没有发生在 pyprocessing 。**和。

在 2.6/3.0 计划期间,PEP 371pyprocessing 应用到 stdlib multiprocessing MODULE 。 这项工作相当 big,done rush特别是因为他们接受PEP8-ifying的任务,因为他们在 threading year一年或者两个月以后,不需要重命名的名字,就可以重新命名这些名字。 尽管如这里,尽管可以能是 threading的一个替代目标,但是我想没有人完成完整的调查。

从那时起,任何人都不会注意到它丢失并建议它,或者没有人提出足够的参数。 如果你相信它应该被添加,并且可以保护你的信任,创建 Bug 或者写入你的实现。 : )

* 很遗憾,我找不到任何与 pyprocessing的历史链接。 源 repo 已死,贡献者在维护 stdlib multiprocessing MODULE 和 PyPI multiprocessing,甚至project项目已经取代了原来的名字,而unrelated的项目已经取代了原来的名称。

** 注意到在问题中,第一个建议是 Timer,其中有一半上的理由是很好的示例代码。

原作者:
...