作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
你们对以下应用程序使用哪些 python 模块有任何建议:我想创建一个运行 2 个线程的守护进程,两个线程都使用 while True:
循环。
任何例子将不胜感激!提前致谢。
更新:
这是我想出的,但行为不是我所期望的。
import time
import threading
class AddDaemon(object):
def __init__(self):
self.stuff = 'hi there this is AddDaemon'
def add(self):
while True:
print self.stuff
time.sleep(5)
class RemoveDaemon(object):
def __init__(self):
self.stuff = 'hi this is RemoveDaemon'
def rem(self):
while True:
print self.stuff
time.sleep(1)
def run():
a = AddDaemon()
r = RemoveDaemon()
t1 = threading.Thread(target=r.rem())
t2 = threading.Thread(target=a.add())
t1.setDaemon(True)
t2.setDaemon(True)
t1.start()
t2.start()
while True:
pass
run()
Connected to pydev debugger (build 163.10154.50)
hi this is RemoveDaemon
hi this is RemoveDaemon
hi this is RemoveDaemon
hi this is RemoveDaemon
hi this is RemoveDaemon
hi this is RemoveDaemon
hi this is RemoveDaemon
hi this is RemoveDaemon
hi this is RemoveDaemon
hi this is RemoveDaemon
hi this is RemoveDaemon
t1 = threading.Thread(target=r.rem())
t2 = threading.Thread(target=a.add())
r.rem()
中的 while 循环是唯一被执行的。我究竟做错了什么?
最佳答案
当您创建线程时t1
和 t2
,你需要传递函数而不是调用它。当您调用 r.rem()
,在您创建线程并将其与主线程分开之前,它会进入无限循环。解决这个问题的方法是从 r.rem()
中删除括号。和 a.add()
在你的线程构造函数中。
import time
import threading
class AddDaemon(object):
def __init__(self):
self.stuff = 'hi there this is AddDaemon'
def add(self):
while True:
print(self.stuff)
time.sleep(3)
class RemoveDaemon(object):
def __init__(self):
self.stuff = 'hi this is RemoveDaemon'
def rem(self):
while True:
print(self.stuff)
time.sleep(1)
def main():
a = AddDaemon()
r = RemoveDaemon()
t1 = threading.Thread(target=r.rem)
t2 = threading.Thread(target=a.add)
t1.setDaemon(True)
t2.setDaemon(True)
t1.start()
t2.start()
time.sleep(10)
if __name__ == '__main__':
main()
关于Python 线程 : Multiple While True loops,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42499299/
我是一名优秀的程序员,十分优秀!