Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python队列多线程_Python_Multithreading - Fatal编程技术网

python队列多线程

python队列多线程,python,multithreading,Python,Multithreading,铁路上只有两列火车(同时)的最简单方式是什么。我的英语不好。这是我唯一能解释的方法。我知道我应该排队吗?我找不到我语言中的信息 谢谢大家! 1> 开始,2>开始。3,4等等。1> 完成,3>开始(第4个仍在等待) 我将在这里猜测一些事情: from threading import Thread, Lock, BoundedSemaphore import time import random def trains(city): with railroads: with

铁路上只有两列火车(同时)的最简单方式是什么。我的英语不好。这是我唯一能解释的方法。我知道我应该排队吗?我找不到我语言中的信息

谢谢大家!

1> 开始,2>开始。3,4等等。1> 完成,3>开始(第4个仍在等待)


我将在这里猜测一些事情:

from threading import Thread, Lock, BoundedSemaphore
import time
import random

def trains(city):
    with railroads:
        with iolock:
            print city, 'start'

        for count in range(1,3):
            delay = random.randrange(5,10)
            with iolock:
                print city, 'delay', delay
            time.sleep(delay)

        with iolock:
            print city, 'end'


cities = ['prague', 'london', 'berlin', 'moscow']
threadlist = []

iolock = Lock()
railroads = BoundedSemaphore(2)

for city in cities:                             
    t = Thread(target=trains, args=(city,))
    t.start()
    threadlist.append(t)


for b in threadlist:
    b.join()
iolock
的目的是阻止终端中的混合输出:一次只打印一个线程。
RailRails
的目的是允许最多两个线程同时进入代码体。下面是示例输出。请注意,“布拉格”和“伦敦”刚开始时正好运行,但“柏林”在“伦敦”结束前不会启动。然后“莫斯科”直到“布拉格”结束才开始:


听起来你想要一个
线程.BoundedSemaphore(2)
,但我对你的问题理解不够透彻,无法建议实际的代码。
from threading import Thread, Lock, BoundedSemaphore
import time
import random

def trains(city):
    with railroads:
        with iolock:
            print city, 'start'

        for count in range(1,3):
            delay = random.randrange(5,10)
            with iolock:
                print city, 'delay', delay
            time.sleep(delay)

        with iolock:
            print city, 'end'


cities = ['prague', 'london', 'berlin', 'moscow']
threadlist = []

iolock = Lock()
railroads = BoundedSemaphore(2)

for city in cities:                             
    t = Thread(target=trains, args=(city,))
    t.start()
    threadlist.append(t)


for b in threadlist:
    b.join()
prague start
london start
prague delay 8
london delay 5
london delay 6
prague delay 5
london end
berlin start
berlin delay 8
prague end
moscow start
moscow delay 8
berlin delay 6
moscow delay 7
berlin end
moscow end