python - linux - 立即启动一个线程

时间:2015-05-15 09:55:46

标签: python linux multithreading delay

这是一些示例代码

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解决方案会很棒......但是不同的解决方案会比没有更好

任何想法? 提前谢谢

1 个答案:

答案 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机制

Python只能在一个CPU核心中运行,你在这里做的只是在CPU中重叠的时钟invervals上运行多次执行。这意味着CPU中的每个其他循环都将在主线程中执行,而另一个阻塞调用将有机会运行执行。他们实际上不会并行运行。

有一些"你可以,但......"线程..像这样: