2016-07-30 88 views
-2

我一直在尋找谷歌,似乎無法得到這個工作。 我試圖線程2功能,這兩個都是無限循環。Python線程不是線程

看看下面的摘錄,它只會啓動第一個線程,不會繼續進行下一個線。

PS:當我交換2個線程,然後我有與第二個線程相同的問題。

def syslog_service(): 
    syslog_server = socketserver.UDPServer((syslog_host,syslog_port), Syslog_Server) 
    syslog_server.serve_forever() 

def cleanup_old_logs_service(): 
# lock = threading.Lock() 
# threading.Thread.__init__(self) 
    global syslog_retention_hours 
    global RUNNING 
    while RUNNING: 
#  cleanup_old_logs_service.lock.acquire() 
     cleanup.old_logs(syslog_retention_hours) 
#  cleanup_old_logs_service.lock.release() 
     time.sleep(10) 

if __name__ == "__main__": 
    try: 
     logger.info("Starting main thread") 
     config() 
     logger.info("Starting system testing") 
     test() 
     logger.info("Config loaded") 
     thread1 = cleanup_old_logs_service() 
     thread2 = syslog_service() 
     thread1.start() 
     logger.info("Syslog cleanup service running") 
     thread2.start() 
     logger.info("Syslog server running") 
+2

調用變量訪問'thread1'沒有按」自動使它成爲一個線程。你實際上並沒有在這裏做任何線程。 – user2357112

回答

1

爲什麼只執行第一線的原因是,你實際上在你的程序只有一個線程。當您編寫thread1 = cleanup_old_logs_service()thread2 = syslog_service()時,您並未創建新線程,而只是將函數的返回值分配給2個不同的變量。因此,只要程序遇到thread1,它就會執行cleanup_old_logs_service()並陷入無限循環。

要創建一個新的線程,我會導入threading模塊,創建一個新的threadObj對象和啓動線程如下:

import threading 

threadObj = threading.Thread(target=cleanup_old_logs_service) 
threadObj.start() 

這樣,功能cleanup_old_logs_service()將在一個新的線程來執行。

+0

你擊敗了我10秒:) – ashwinjv

+0

真棒,感謝的人 - 它還活着! – Spac3

0

通過說thread1 = cleanup_old_logs_service()您實際上正在執行功能cleanup_old_logs_service不保存對線程的引用。你不得不說

import threading # If you have not already 

thread1 = threading.Thread(target=cleanup_old_logs_service) 
thread2 = threading.Thread(target=syslog_service) 

# Now you can start the thread 
thread1.start() 
logger.info("Syslog cleanup service running") 
thread2.start() 
logger.info("Syslog server running") 

你可以看一下https://docs.python.org/3.5/library/threading.html的文檔和https://pymotw.com/2/threading/的例子,因爲我相信你會需要使用locks來管理您的資源