gpt4 book ai didi

python - Python 中的 time.sleep 和多线程问题

转载 作者:太空宇宙 更新时间:2023-11-03 15:28:21 34 4
gpt4 key购买 nike

我对 python 中的 time.sleep() 函数有疑问。我正在运行一个脚本,需要等待另一个程序生成 txt 文件。虽然,这是一台非常旧的机器,所以当我休眠 python 脚本时,我遇到了其他程序不生成文件的问题。除了使用 time.sleep() 之外,还有其他选择吗?我认为锁定线程可能会起作用,但本质上它只是将线程锁定几秒钟的循环。我将在这里给出一些我正在做的伪代码。

While running:
if filesFound != []:
moveFiles
else:
time.sleep(1)

最佳答案

进行非阻塞等待的一种方法是使用 threading.Event :

import threading
dummy_event = threading.Event()
dummy_event.wait(timeout=1)

这可以是来自另一个线程的 set() 以指示某事已完成。 但是如果您在另一个线程中执行操作,您可以完全避免超时和事件,而只是加入另一个线程:

import threading

def create_the_file(completion_event):
# Do stuff to create the file

def Main():
worker = threading.Thread(target=create_the_file)
worker.start()

# We will stop here until the "create_the_file" function finishes
worker.join()

# Do stuff with the file

如果您想要一个使用事件进行更细粒度控制的示例,我可以向您展示...

如果您的平台不提供线程模块,线程方法将不起作用。例如,如果您尝试替换 dummy_threading 模块,dummy_event.wait() 会立即返回。不确定 join() 方法。

如果您正在等待其他进程完成,最好使用 subprocess 从您自己的脚本管理它们模块(然后,例如,使用 wait 方法来确保在您进行进一步工作之前完成该过程)。

如果您无法通过脚本管理子进程,但您知道 PID,则可以使用 os.waitpid()功能。如果在您使用此函数时进程已经完成,请当心 OSError...

如果你想要一种跨平台的方式来监视一个目录以得到新文件的通知,我建议使用 GIO FileMonitor来自 PyGTK/PyGObject .您可以使用 monitor_directory 在目录上获取监视器GIO.File 的方法.

目录监视的快速示例代码:

import gio

def directory_changed(monitor, file1, file2, evt_type):
print "Changed:", file1, file2, evt_type

gfile = gio.File(".")
monitor = gfile.monitor_directory(gio.FILE_MONITOR_NONE, None)
monitor.connect("changed", directory_changed)

import glib
ml = glib.MainLoop()
ml.run()

关于python - Python 中的 time.sleep 和多线程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3416160/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com