2016-07-30 86 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来管理您的资源