这是一些示例代码
while True: #main-loop
if command_received:
thread = Thread(target = doItNOW)
thread.start()
......
def doItNOW():
some_blocking_operations()
我的问题是我需要“some_blocking_operations”立即启动(一旦command_received为True)。 但由于它们阻塞我无法在主循环上执行它们 我无法将“some_blocking_operations”更改为非阻塞
对于“IMMEDIATELY”,我的意思是尽快,不超过10ms的延迟。 (我曾经有一整秒的延迟)。 如果不可能,也可以接受持续的延迟。 (但它必须是常数。只有几毫秒的误差)我目前正在开发一个Linux系统(Ubuntu,但未来可能是另一个。总是linux)
一个python解决方案会很棒......但是不同的解决方案会比没有更好任何想法? 提前谢谢
答案 0 :(得分:1)
from threading import Thread
class worker(Thread):
def __init__(self, someParameter=True):
Thread.__init__(self)
# This is how you "send" parameters/variables
# into the thread on start-up that the thread can use.
# This is just an example in case you need it.
self.someVariable = someParameter
self.start() # Note: This makes the thread self-starting,
# you could also call .start() in your main loop.
def run():
# And this is how you use the variable/parameter
# that you passed on when you created the thread.
if self.someVariable is True:
some_blocking_operations()
while True: #main-loop
if command_received:
worker()
这是以线程方式对some_blocking_operations()
进行非阻塞执行。我不确定你要找的是实际等待线程是否完成,或者你是否关心?
如果您只想等待"命令"接收然后执行阻塞操作而不等待它,验证它是否完成,那么这应该适合你。
Python只能在一个CPU核心中运行,你在这里做的只是在CPU中重叠的时钟invervals上运行多次执行。这意味着CPU中的每个其他循环都将在主线程中执行,而另一个阻塞调用将有机会运行执行。他们实际上不会并行运行。
有一些"你可以,但......"线程..像这样: