我正在开发一个包含两个组件的 Python/bottle 应用程序:
- 一个 REST 端点,用于接收消息并将它们放入队列(在 Redis 中)
- 一个“worker”,它是一个无限循环,轮询消息并处理它们
在生产中,两者将在不同的进程中运行,但出于开发目的在本地运行时,我希望在同一进程中运行它们。
线程似乎是显而易见的答案,但在单独的进程中运行组件时,线程是不必要的。
仅当在同一进程中运行两个组件时,是否有一种优雅的方法可以选择性地采用线程方法?
请您参考如下方法:
这应该不是问题,因为听起来它们是完全孤立的。我只想添加一个导入线程的新脚本,然后将其他起始脚本包装在函数中或调用它们与新线程一起使用的函数。
这是一个简单的例子:
import threading
def script1():
import script1
def script2():
import script2
t1 = threading.Thread(target=script1)
t2 = threading.Thread(target=script2)
t1.start()
t2.start()
t1.join()
t2.join()
这将启动脚本的脚本主要部分中的任何内容,更理想的是,如果脚本具有实际的主要功能,您可以在线程中运行它。
需要注意的几点:
- 如果他们正在处理任何单例或全局,他们最终可能会互相攻击。
- 此外,由于 python 有一个 GIL,它们可能不会像生产脚本那样运行得那么快和/或具有不同的时序。
- 解决这两个问题的方法是使用多处理模块,它们不会在同一个进程中,但它们可以同时从同一个脚本运行。
