我一直在寻找谷歌,似乎无法让这个工作。 我正在尝试编写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")
答案 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")
来管理对资源的访问