python: subprocess.call 线程问题

0 投票
1 回答
581 浏览
提问于 2025-04-16 12:25

大家好,关于这个“while True”循环的问题,处理似乎永远不会结束,即使我使用了q.task_done,这里到底出了什么问题呢?


fileQueue = Queue()
def submit(i, q):
    global filespath
    while True:
      filename = q.get()
      retVT = subprocess.call("python abc.py -f %s" % (filespath + filename), shell=True, stdout=open('/dev/null', 'w'), stderr=subprocess.STDOUT)
      retTH = subprocess.call("python def.py -a %s" % (filename), shell= True, stdout=open('/dev/null', 'w'), stderr=subprocess.STDOUT)
      q.task_done()

def main():
global fileQueue
num_threads = fileQueue.qsize() # 获取队列中任务的数量
for i in range(num_threads): # 根据任务数量创建线程
worker = Thread(target=submit, args=(i, fileQueue)) # 创建一个新线程,执行submit函数
worker.setDaemon(True) # 设置为守护线程,这样主程序结束时它也会结束
worker.start() # 启动线程
fileQueue.join() # 等待队列中的所有任务完成
print "Done" # 打印“完成”

if name == 'main':
main() # 如果这个文件是主程序,就运行main函数

谢谢

1 个回答

0

abc.py和def.py这两个文件的内容是什么?你确定你执行的命令会结束吗?试着把两个subprocess.call()的那行代码注释掉,然后看看程序是否按预期工作。如果这样突然能正常工作,那问题可能出在你在代码外部调用的脚本上。

撰写回答