假设我有一个Python程序,如下所示:
import time
def send_message_realtime(s):
print("Real Time: ", s)
def send_message_delay(s):
time.sleep(5)
print("Delayed Message ", s)
for i in range(10):
send_message_realtime(str(i))
time.sleep(1)
send_message_delay(str(i))
我在这里想要做的是某种多线程,这样我的main for循环的内容就可以继续执行,而不必等待延迟函数中time.sleep(5)引起的延迟。
理想情况下,我正在处理的代码如下。我从某个API端点收到一条消息,希望将其实时发送到特定的电报频道(付费用户),但是我也想通过将它们延迟10分钟或600秒来将其发送到另一个频道免费会员。我面临的问题是,我想继续向我的付费订户实时发送消息,并为延迟的消息创建一个新的线程/进程,该消息/进程独立于主while循环运行。
def send_message_realtime(my_realtime_message):
telegram.send(my_realtime_message)
def send_message_delayed(my_realtime_message):
time.sleep(600)
telegram.send(my_realtime_message)
while True:
my_realtime_message = api.get()
send_message_realtime(my_realtime_message)
send_message_delayed(my_realtime_message)
我是python的新手,但我认为类似ThreadPoolExecutor的功能可以满足您的需求:
import time
from concurrent.futures.thread import ThreadPoolExecutor
def send_message_realtime(s):
print("Real Time: ", s)
def send_message_delay(s):
time.sleep(5)
print("Delayed Message ", s)
def work_to_do(i):
send_message_realtime(str(i))
time.sleep(1)
send_message_delay(str(i))
with ThreadPoolExecutor(max_workers=4) as executor:
for i in range(10):
executor.submit(work_to_do, i)
这max_workers
将是给定时刻可能具有的并行消息的数量。
除了多线程解决方案,您还可以使用多处理解决方案,例如
from multiprocessing import Pool
...
with Pool(4) as p:
print(p.map(work_to_do, range(10)))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句