import threading
import time
import queue
import pandas as pd
reader = pd.read_csv("name.csv",header=None)
import numpy as np
reader = np.array(reader)
customer = [row[0] for row in reader]
machineNUM = 3 #三台扫码机
linenum=5
semaphore = threading.Semaphore(machineNUM) #创建扫码机信号量
signal1 = 0 #判断人员是否分配完毕
time_start=time.clock()
A=[queue.Queue() for i in range(linenum)]
B=[queue.Queue() for i in range(linenum)]
J=[[0] for i in range(linenum)]#扫码
thread_num = linenum*2+1
threads = []
#人员分配点
def Group(A):
global signal1
for i in range(0,20,linenum):
for m in range(linenum):
for j in range(10):
if(10*(m+i)+j<200):
A[m].put(customer[10*(m+i)+j])
time.sleep(0.1)
if(10*(m+i)+j==199):
signal1 = 1
thread = threading.Thread(target=Group,args=(A,))
threads.append(thread)
#扫二维码
def QR(A,B,J):
while(True):
while(A.qsize()>=10):
semaphore.acquire()
time.sleep(0.8)
for i in range(10):
B.put(A.get())
time.sleep(0.3)
semaphore.release()
time.sleep(0.8)
if(A.qsize()<10 and signal1==1):
if(A.empty()):
J[0]=1
break
else:
time.sleep(0.8)
semaphore.acquire()
for i in range(A.qsize()):
B.put(A.get())
time.sleep(0.3)
semaphore.release()
time.sleep(0.8)
J[0]=1
break
else:
time.sleep(0.000001)
continue
#核酸检测点
def HScheck(B,J):
n=0
while(True):
while not B.empty():
n=n+1
time.sleep(0.5)
if (B.empty() and J[0]==1):
print(n)
break
if (B.empty() and J[0]==0):
time.sleep(0.000001)
continue
#队伍,线程创建
for i in range(linenum):
threads.append(threading.Thread(target=QR,args=(A[i],B[i],J[i])))
for i in range(linenum):
threads.append(threading.Thread(target=HScheck,args=(B[i],J[i])))
for i in range(thread_num):
threads[i].start()
for i in range(thread_num):
threads[i].join()
time_end=time.clock()
print(time_end-time_start)