Python thread.Timer()在我的进程中不起作用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python thread.Timer()在我的进程中不起作用相关的知识,希望对你有一定的参考价值。

import os
import sys
from multiprocessing import Process, Queue
import threading

class Test:
  def __init__(self):
    print '__init__ is called'

  def say_hello_again_and_again(self):
    print 'Hello :D'
    threading.Timer(1, self.say_hello_again_and_again).start()


test = Test()
#test.say_hello_again_and_again()
process = Process(target=test.say_hello_again_and_again)
process.start()

这是测试代码。

结果:

pi@raspberrypi:~/Plant2 $ python test2.py
__init__ is called
Hello :D

如果我使用test.say_hello_again_and_again(),则重复打印“Hello:D”。

但是,流程并没有像我预期的那样发挥作用。为什么我的过程中没有打印“Hello:D”?

我的流程中发生了什么?

答案

您的代码有两个问题:

第一:你用start()开始一个过程。这是做一个fork,这意味着现在你有两个进程,父和子并排运行。现在,父进程立即退出,因为在start()之后它就是程序的结束。要等到孩子完成(在你的情况下永远不会),你必须添加process.join()

我确实测试了你的建议,但它不起作用

确实。还有第二个问题:你用threading.Timer(1, ...).start()开始一个新的线程,但随后立即结束这个过程。现在,您不要等到线程启动,因为基础进程会立即死亡。你还需要等到线程停止使用join()

现在这就是你的程序的样子:

from multiprocessing import Process
import threading

class Test:
  def __init__(self):
    print '__init__ is called'

  def say_hello_again_and_again(self):
    print 'Hello :D'
    timer = threading.Timer(1, self.say_hello_again_and_again)
    timer.start()
    timer.join()

test = Test()
process = Process(target=test.say_hello_again_and_again)
process.start()
process.join()

但这最好是次优的,因为你混合多处理(使用fork启动独立进程)和线程(在进程中启动一个线程)。虽然这不是一个真正的问题,但它使调试变得更加困难(例如,上面的代码有一个问题是你不能用ctrl-c来阻止它,因为你的衍生进程是由OS继承并继续运行的)。你为什么不这样做?

from multiprocessing import Process, Queue
import time

class Test:
  def __init__(self):
    print '__init__ is called'

  def say_hello_again_and_again(self):
    while True:
        print 'Hello :D'
        time.sleep(1)

test = Test()
process = Process(target=test.say_hello_again_and_again)
process.start()
process.join()

以上是关于Python thread.Timer()在我的进程中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

想通过Python爬虫轻松接私活的进

我的debian无法上网,知道的进(interface是只读权限,无法修改啊)

会汇编 符号填充指令MOVSX 的进一下

知道win32.pifio病毒的进

我的 电脑只能读取IDE硬盘,现在我 想把IDE改为SATA硬盘但是我硬盘插上读不 出来BIOS显示为None懂的进

安装Linux ubuntu 用过Linux的进