实现线程python的正确方法

2024-06-17 11:58:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用python实现一个简单的足球模拟器,使用线程和锁,这个应用程序运行得很好,但是我对实现线程的方式有怀疑在我看来,第一队有优势,因为它是先执行的。你知道吗

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.

Tags: time线程rankingprobeqaeqbhiloequipo2