python 异步后台任务

pbossiut  于 2023-02-28  发布在  Python
关注(0)|答案(1)|浏览(172)

我有一个类produceMessages,它不断地向它的属性message_logs提供消息。我想在另一个类processMessages中处理这些消息。然而,processMessages中的代码在produceMessages完成之前不会执行--这是永远不会的,因为我希望这些消息永远出现。
通过查看文档,我发现asyncio库可能对我有帮助,但我很难让下面的示例工作:
这是第一个_文件.py:

import asyncio
import random

class produceMessages:
    def __init__(self, timeout = 10):
        self.timeout = timeout
        self.message_logs = []

    async def run(self):
        while(True):
            self.message_logs.append(random.uniform(0, 1))           
            await asyncio.sleep(self.timeout)

这是第二个_文件.py:

import first_file
import asyncio
import time

class processMessages:
    def __init__(self):
        self.producer = first_file.produceMessages()
        asyncio.run(self.producer.run())

    def print_logs(self):
        print(self.producer.message_logs)
        time.sleep(1)

x = processMessages()
x.print_logs()

我该怎么做呢?

tkclm6bt

tkclm6bt1#

我建议您尝试库线程。这是我将如何处理它:

import first_file
import asyncio
import time

class processMessages():
    def __init__(self):
        self.test = first_file.produceMessages()
        t = threading.Thread(target=self.test.run)
        t.run()
        t2 = threading.Thread(target=self.print_logs)

    def print_logs(self):
        print(self.test.message_logs)
        time.sleep(1)

x = processMessages()
x.t2.run()

相关问题