[英]Trying to get two while loops to run concurrently using threading or multiprocessing
根据在线示例,我尝试过的这两种方法应该可以解决我的问题(请参见代码)。 这两个while循环即使在单独的线程中也一个接一个地运行。
我尝试了线程和多处理。
global numberit
numberit= 0
global numberg
numberg= 0
def countingit(numberit):
while numberit < 10:
numberit += 1
print("counter ", numberit)
# time.sleep(1)
def garbage(numberg):
while numberg < 10:
numberg += 1
print("garbage ", numberg)
# time.sleep(1)
# threading.Thread(target=countingit(numberit)).start()
# threading.Thread(target=garbage(numberg)).start()
if __name__ == '__main__':
Process(target=countingit(numberit)).start()
Process(target=garbage(numberg)).start()
# threading.Thread(target=countingit(numberit)).start()
# threading.Thread(target=garbage(numberg)).start()
我正在尝试打印它:
柜台1垃圾1柜台2垃圾2
... 等等。
该计划是在循环线程与带有按钮的tkinter gui同时运行时运行。 但是我不能让它们同时运行。 一个过程总是必须在另一个过程开始之前完成。
谢谢。
我已经尝试了提供的示例代码中显示的内容。
我没有让每个while循环间隔运行,而是让它们一个接一个地运行,这不是期望的结果。 我正在尝试将其作为测试,然后在另一个线程中添加tkinter gui。
结果如下:
柜台1 ...柜台10垃圾1 ...垃圾10
但想:计数器1垃圾1 ...计数器10垃圾10
我在这两行中看到一个问题:
threading.Thread(target=countingit(numberit)).start()
threading.Thread(target=garbage(numberg)).start()
这是一种常见的反模式-而不是创建一个使用参数numberit
调用countingit
的线程,此代码立即在主线程中调用countingit
,然后将返回值传递给线程初始化程序。
要将参数传递给线程正在调用的函数,请使用args
参数。 即使只有一个参数,也请确保将其作为一个元组传递。
threading.Thread(target = countingit, args=(numberit,)).start()
threading.Thread(target = garbage, args=(numberit,)).start()
当我在机器上运行它时,我得到的输出是按需交错的:
counter 1
counter 2
garbage 1
counter 3
garbage 2
counter 4
counter 5
garbage 3
counter 6
counter 7
garbage 4
counter 8
garbage 5
counter 9
garbage 6
counter 10
garbage 7
garbage 8
garbage 9
garbage 10
(所有这些建议也适用于您基于流程的尝试)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.