正确的方法来实现线程python

时间:2017-11-24 02:37:24

标签: python multithreading python-3.x

我使用线程和锁实现了一个简单的足球模拟器,使用线程和锁定,应用程序工作正常但我对实现线程的方式有疑问,在我看来第一个团队有优势,因为首先执行。< / p>

def jugar(Equipo1, Equipo2):
    # Busco las probabilidades de encajar por cada equipo
    prob_encajar_eq1 = Equipo1.probabilidad_encajar()
    prob_encajar_eq2 = Equipo2.probabilidad_encajar()

    def jugar_equipo1(defensa_rival):

        semaforo.acquire()
        if Equipo1.hacer_pases():
            Equipo1.shoot(defensa_rival)
        semaforo.release()

    def jugar_equipo2(defensa_rival):

        semaforo.acquire() 
        if Equipo2.hacer_pases():
            Equipo2.shoot(defensa_rival)
        semaforo.release() 


    hilo_equipo1 = threading.Thread(name = 'hilo_eq1', target = jugar_equipo1, args = (prob_encajar_eq2,))
    hilo_equipo2 = threading.Thread(name = 'hilo_eq2', target = jugar_equipo2, args = (prob_encajar_eq1,))


    hilo_equipo1.start()
    hilo_equipo2.start()

    hilo_equipo1.join()
    hilo_equipo2.join()

对两个团队进行多次尝试,我做了几秒钟并且在函数jugar()里面进行了一个与线程一起工作但是我有疑虑,因为每次jugar是执行线程再次声明。

if __name__ == '__main__':
cargar_informacion()    

eqA = Equipo(equipoA, ranking_eqA)
eqB = Equipo(equipoB, ranking_eqB)

probabilidades = porcenajes_ranking(ranking_eqA)
eqA.cargar_probabilidades(probabilidades)

probabilidades = porcenajes_ranking(ranking_eqB)
eqB.cargar_probabilidades(probabilidades)

starttime=time.time()
tiempo = 0
# creo la barra de progreso
bar = progressbar.ProgressBar(widgets=[
    progressbar.Percentage(),
    progressbar.Bar(),
], max_value=100).start()

# hacemos que el juego tarde aproximadamente 10seg en simularse.
while tiempo < 10:
    time.sleep(0.3 - ((time.time() - starttime) % 0.3))

    jugar(eqA,eqB)

    tiempo = time.time() - starttime
    bar += 2.8
bar.finish() # Para que finalice la barra de progreso

resultados_finales(eqA, eqB) # Mostramos el resultado final del partido.

0 个答案:

没有答案