Faire fonctionner 2 fonctions en même temps

j'essaie de faire fonctionner 2 fonctions en même temps.

def func1():
    print 'Working'

def func2():
    print 'Working'

func1()
func2()

est-ce que quelqu'un sait faire ça?

29
demandé sur Mattias Nilsson 2010-06-02 15:16:48

7 réponses

Faites ceci:

import threading
from threading import Thread

def func1():
    print 'Working'

def func2():
    print 'Working'

if __name__ == '__main__':
    Thread(target = func1).start()
    Thread(target = func2).start()
56
répondu chrissygormley 2010-06-03 08:26:10

La réponse threading est bonne, mais vous devez être un peu plus précis sur ce que vous voulez faire.

si vous avez deux fonctions qui utilisent toutes les deux beaucoup de CPU, fileter (en CPython) ne vous mènera probablement nulle part. Alors vous pourriez vouloir jeter un oeil au multiprocessing module ou peut-être vous voulez utiliser jython/IronPython.

si la performance liée au CPU est la raison, vous pouvez même implémenter des choses dans (non-threaded) C et obtenir une plus grande vitesse que faire deux choses en parallèle en python.

sans plus d'information, il n'est pas facile de trouver une bonne réponse.

9
répondu Mattias Nilsson 2017-05-23 12:10:21

j'ai lancé ce code pour vérifier si les fonctions fonctionnent en même temps:

#! /usr/bin/env python
import threading
from threading import Thread
import time

def time1():
    time.sleep(1)
    print time.time()

def time2():
    time.sleep(1)
    print time.time()   

if __name__ == '__main__':
    Thread(target = time1()).start()
    Thread(target = time2()).start()

C'est de quoi il en retourne:

1447425262.16 1447425263,16

Pour moi, cela semble les fonctions s'exécutent l'une après l'autre...?

5
répondu LuukS 2015-11-13 14:36:01

une option, qui ressemble à elle fait deux fonctions exécuter à la même

le temps
, utilise le module threading (exemple dans cette" réponse ).

cependant, il a un petit retard, comme une Documentation officielle de Python

page décrit. Un meilleur module à essayer est multiprocessing .

il y a aussi d'autres modules Python qui peuvent être utilisés pour exécution asynchrone (deux morceaux de code fonctionnant en même temps). Pour obtenir de l'information à leur sujet et de l'aide pour en choisir une, vous pouvez lire cette question de débordement de la pile .

commentaire d'un autre utilisateur sur le threading module

il pourrait vouloir savoir qu'en raison de L'interprète globale Serrure

ils n'exécuteront pas au même moment même si la machine dans

question a plusieurs CPU. wiki.python.org/moin/GlobalInterpreterLock

"151940920 – - Jonas Elfström Jun 2 '10 à 11: 39

citation de la Documentation sur threading module ne fonctionne pas

CPython détails de mise en œuvre: en CPython, en raison de L'interpréteur Global

Lock, un seul thread peut exécuter du code Python à la fois (même si

certaines bibliothèques axées sur la performance pourraient surmonter cette limitation).

si vous voulez que votre application fasse une meilleure utilisation des ressources computationnelles des machines multi-core, il vous est conseillé d'utiliser multiprocessing ou concurrent.avenir.ProcessPoolExecutor.

Cependant, le filetage est toujours un modèle approprié si vous

vous voulez exécuter plusieurs tâches liées aux E/S simultanément.

5
répondu Edward 2018-08-04 17:57:07

Essayez cette

from threading import Thread

def fun1():
    print("Working1")
def fun2():
    print("Working2")

t1 = Thread(target=fun1)
t2 = Thread(target=fun2)

t1.start()
t2.start()
0
répondu Shanan Ilen 2018-06-27 13:34:54

le module thread fonctionne simultanément contrairement à multiprocess, mais le timing est un peu hors tension. Le code ci-dessous imprime un "1" et "2". Ils sont appelés par différentes fonctions respectivement. J'ai remarqué que lorsqu'ils étaient imprimés sur la console, ils avaient des minuteries légèrement différentes.

   from threading import Thread

   def one():
       while(1 == num):
           print("1")
           time.sleep(2)

   def two():
       while(1 == num):
           print("2")
           time.sleep(2)


   p1 = Thread(target = one)
   p2 = Thread(target = two)

   p1.start()
   p2.start()

sortie: (notez que l'espace est réservé à l'attente entre l'impression)

   1
   2

   2
   1

   12

   21

   12

   1
   2

pas sûr s'il y a un moyen de corriger cela, ou si cela importe à tous. Juste quelque chose que j'ai remarqué.

0
répondu I506dk 2018-07-28 04:59:22

je pense que ce que vous essayez de transmettre peut être réalisé par multiprocesseur. Cependant, si vous voulez le faire à travers des fils, vous pouvez le faire. Cela pourrait aider

from threading import Thread
import time

def func1():
    print 'Working'
    time.sleep(2)

def func2():
    print 'Working'
    time.sleep(2)

th = Thread(target=func1)
th.start()
th1=Thread(target=func2)
th1.start()
0
répondu Soham Kapoor 2018-08-14 12:22:53