Python线程不是线程

时间:2016-07-30 00:59:59

标签: python multithreading

我一直在寻找谷歌,似乎无法让这个工作。 我正在尝试编写2个函数,这两个函数都是无限循环。

查看下面的摘录,它只会启动第一个主题并且不会继续进行下一个主题。

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 个答案:

答案 0 :(得分:1)

只执行第一个线程的原因是程序中实际上只有一个线程。当您编写WHERE HEX(name) REGEXP '^(..)*E[456789]' thread1 = cleanup_old_logs_service()时,您不是在创建新线程,而只是将函数的返回值分配给2个不同的变量。因此,只要程序遇到thread2 = syslog_service(),它就会执行thread1并陷入无限循环。

要创建新线程,我将导入cleanup_old_logs_service()模块,创建一个新的threading对象并按如下方式启动该线程:

threadObj

这样,函数import threading threadObj = threading.Thread(target=cleanup_old_logs_service) threadObj.start() 将在新线程中执行。

答案 1 :(得分:0)

通过说Process,您实际上正在执行函数thread1 = cleanup_old_logs_service()而不保存对线程的引用。你不得不说

cleanup_old_logs_service

您可以查看https://docs.python.org/3.5/library/threading.html以获取文档,https://pymotw.com/2/threading/查看示例,因为我认为您需要使用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") 来管理对资源的访问