Hoi,
Als beginnend python programmeur (wel ervaring in .net) liep ik tegen een probleem aan. Ik heb een aantal langdurige processen. Om de rekentijd te verkorten wil ik graag beide cores van mijn processor gebruiken. Ik heb begrepen dat threads (wat je zou doen in .net) in Python niet de goede manier hiervoor zijn, omdat die niet echt parallel uitgevoerd worden. Ik moet dus meerdere processen starten. Voorwaarde hierbij is dat ik niet meer processen tegelijk wil laten lopen dan er cores zijn, in dit geval 2. Om te oefenen heb ik het volgende progje geschreven:
#!/usr/bin/env python
from multiprocessing import Process
import time
#de functie die in de processen gebruikt wordt:
def f(name, tijd):
for i in range(30):
time.sleep(tijd)
print name," ", str(i)
p=[] #lijst van processen
for i in range(2): #maak 2 processen aan
#Thread1 geeft elke 1 seconde een waarde, thread 2 elke 2 seconden etc
p.append(Process(target=f,args=('Thread'+str(i),i+1)))
#er moet 10x een process worden gestart
for i in range(10):
while True:
for t in p: #kijkt of er een thread vrij is
if t.is_alive()==False:
t.start() #eerste 2 processen starten goed, daarna foutmelding
break #stop de infinite while-lus als een thread gestart wordt
Dit programma geeft een foutmelding omdat een proces niet 2 keer gestart kan worden. Een nieuw proces aan de variabele toewijzen, zoals in .net kan, mag ook niet van python. Weet iemand een oplossing?