【发布时间】:2022-04-11 16:56:02
【问题描述】:
所以我一直在尝试同时运行两个功能,但除非我停止另一个,否则其中一个似乎永远无法工作。第一个功能旨在每 30 秒发送一封电子邮件(功能经过自身测试并且有效)第二个功能是每 5 秒打印一个简单的语句。因此,在我看到每 6 个“Hello Worlds”语句之后,我应该收到一封电子邮件。但是,除非我在运行函数中实现一些东西来阻止它,比如“10 秒后结束”,否则我永远不会收到电子邮件。我希望这两个功能无限地继续(如果可能的话不会崩溃)。任何帮助表示赞赏。
async def timer():
now = time.time()
end = now + 30
#sendmail(name, filepath + "\\" + name, receiver)
while True:
if time.time() >= end:
sendmail(name, filepath + "\\" + name, receiver)
now = time.time()
end = now + 30
async def runs():
while True:
print("Hello World")
time.sleep(5)
loop = asyncio.get_event_loop()
loop.create_task(runs())
loop.create_task(timer())
loop.run_forever()
此外,如果有人能够使用多处理或线程模块完成任务,我会很想看看它是如何完成的,因为我已经尝试过并且都失败了。 我尝试过的示例:
t1 = threading.Thread(target=timer)
t2 = threading.Thread(target=runs)
t1.start()
t2.start()
【问题讨论】:
-
async提供合作并发。timer不是合作编写的 - 它从不暂停,例如通过asyncio.sleep(0). -
理想情况下,您还需要一个可等待的
sendmail版本。
标签: python-3.x asynchronous python-asyncio python-multiprocessing python-multithreading