Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 多线程-在另一个线程中调用多次的函数_Python_Multithreading - Fatal编程技术网

Python 多线程-在另一个线程中调用多次的函数

Python 多线程-在另一个线程中调用多次的函数,python,multithreading,Python,Multithreading,基本问题:我需要监听一个流,并且在特定的时间间隔(当从流中接收到特定的信息时),我希望运行一个单独的函数,但仍然继续监听。我知道一种方法是使用线程,其中一个线程侦听,另一个线程执行操作。我修改了一个在线示例来执行此操作,但它只调用“act”函数一次,而不是每次设置事件时。有没有一种方法可以根据“stream”线程中的事件调用“act”函数?(注意,下面没有实际的流,只有一个循环。这个问题需要简化。下面的事件是当j等于3,6,9时) 输出: (block) Initiated - waiting.

基本问题:我需要监听一个流,并且在特定的时间间隔(当从流中接收到特定的信息时),我希望运行一个单独的函数,但仍然继续监听。我知道一种方法是使用线程,其中一个线程侦听,另一个线程执行操作。我修改了一个在线示例来执行此操作,但它只调用“act”函数一次,而不是每次设置事件时。有没有一种方法可以根据“stream”线程中的事件调用“act”函数?(注意,下面没有实际的流,只有一个循环。这个问题需要简化。下面的事件是当j等于3,6,9时)

输出:

(block) Initiated - waiting...
(non-block) j: 0
(non-block) Event: False
(non-block) j: 1
(non-block) Event: False
(non-block) j: 2
(non-block) Event: False
(non-block) j: 3
(non-block) Event: True
(block) Event is set, creates CS
(non-block) j: 4
(non-block) Event: False
(non-block) j: 5
(non-block) Event: False
(non-block) j: 6
(non-block) Event: True
(non-block) j: 7
(non-block) Event: True
(non-block) j: 8
(non-block) Event: True
(non-block) j: 9
(non-block) Event: True

当j=3时调用“act”函数,但对于j=6或j=9时调用“act”函数,即使事件为真。我显然犯了一个错误,但我需要做什么/做什么更改才能获得该功能?

这是因为
act
线程已完成

如果在您的用例中您正等待三个事件,那么您需要在act函数中有一个
循环
,它将等待事件三次。如果你想让它永远听下去,你需要一个无限循环和一个机制,当你处理完流线程时,杀死线程

#如果您正期待3个事件。
国防部法案(e):
对于范围(3)中的i:
debug(f'Initiated-等待事件{i}')
事件\u为\u集=e.等待()
如果设置了事件\u:
logging.debug('设置事件,创建CS')
e、 清除()
(block) Initiated - waiting...
(non-block) j: 0
(non-block) Event: False
(non-block) j: 1
(non-block) Event: False
(non-block) j: 2
(non-block) Event: False
(non-block) j: 3
(non-block) Event: True
(block) Event is set, creates CS
(non-block) j: 4
(non-block) Event: False
(non-block) j: 5
(non-block) Event: False
(non-block) j: 6
(non-block) Event: True
(non-block) j: 7
(non-block) Event: True
(non-block) j: 8
(non-block) Event: True
(non-block) j: 9
(non-block) Event: True