2015-06-17 64 views
0

我正在使用以下lib創建名爲pyftpdlib的ftp服務器。
繼構建一個基本的ftp服務器的確切示例之外,我創建了自己的自定義處理程序並將其作爲示例傳遞給它。在多線程環境中每隔50秒輪詢一次

第一個問題: 我需要能夠在自定義處理程序中定義的靜態字典(類變量)上每隔50秒輪詢一次。每隔50秒後,我需要檢查一些情況並採取相應措施。您可能會看到,FTP服務器正在使用自定義處理程序,我想我需要一些能夠每隔50秒輪詢一次自定義處理程序的靜態字典的工作線程,如何啓動另一個線程被綁定到自定義處理程序並執行那種計時器輪詢?

第二個問題:是否有某種方法知道從靜態字典中讀取的特定時間戳已經過去了50秒的時間(第二秒它已經通過了) - 我的意思是沒有輪詢每隔X秒檢查時間是否已經過去,這可能是不準確的。

回答

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秒結束的意思。這些長時間輪詢通常是通過讓任務睡眠一段時間然後醒來開始工作來完成的。這種方法不適合您的要求嗎?但是你是對的,你的時間可能仍然會有一些漂移,但這是絕對的要求嗎?