0

我正在使用以下库来创建名为pyftpdlib的 ftp 服务器。
遵循构建基础 ftp 服务器的确切示例,除了我创建了自己的自定义处理程序并按照示例中的方式传递它。

第一个问题: 我需要能够每 50 秒对自定义处理程序中定义的静态字典(类变量)进行轮询。每间隔 50 秒后,我需要检查一些情况并采取相应措施。

正如您可能看到的那样,FTP 服务器正在使用自定义处理程序,我想我需要一些工作线程能够每 50 秒轮询一次自定义处理程序的静态字典,我如何启动另一个绑定到自定义处理程序并进行这种计时器轮询?

第二个问题:有没有办法知道自从从静态字典读取的特定时间戳以来已经过去了 50 秒的时间(在它过去的那一秒) - 我的意思是这样做而不是每隔 X 秒轮询一次以检查是否时间过去了,这可能是不准确的。

4

1 回答 1

0

第一个问题

在您的工作线程中,使用基于类的版本来创建线程。您将处理程序传递给对象的构造函数,并且该对象将引用您已经创建的相同自定义处理程序。

在我的示例中,“处理程序”应包含在带有互斥锁的函数中,以使其线程安全

请注意,您可能希望将互斥锁添加到自定义处理程序以防止数据竞争并确保这是线程安全的。该代码只是为您提供一个想法的示例。如果它不能按原样工作。让我知道。

from threading import Thread
from time import sleep

class Worker(Thread):
    def __init__(self, custom_handler):
        self.handler = custom_handler

    def run(self):
        while(True):
            sleep(50)

            # check handler
            if self.handler:
                # do something
                pass



handler = {}
worker = Worker(handler)

# start thread
worker.run()

第二个问题

不知道“知道” 50 秒已经过去是什么意思。这些长时间的轮询通常是通过让任务休眠给定的时间然后醒来做工作来完成的。这种方法不符合您的要求吗?但是您是对的,您可能仍然会在时间上遇到一些偏差,但这是绝对要求吗?

于 2015-06-17T21:26:23.510 回答