Comparació de solucions segons model concurrent¶
Exemple asyncio¶
Fitxer exempleAsyncio.py
from f_exemple import f_exemple, dades, espera, nfills
import asyncio
import time
async def f_exemple(ident, dada, segons):
print('inici fil ', ident)
res = sum(range(dada))
await asyncio.sleep(segons)
print('resultat fil ', ident, ':', res)
return res
async def progr():
fills = (f_exemple(i, dades[i], espera[i])
for i in range(n_fills))
L= await asyncio.gather(*fills)
print("Això és tot!!!!!", L)
if __name__=='__main__':
asyncio.run(progr())
Exemple fork¶
Fitxer exempleFork.py
import os
import f_exemple as ex
def prog():
pids = []
for i in range(ex.n_fills):
noupid = os.fork()
if noupid == 0:
ex.f_exemple(i, ex.dades[i], ex.espera[i]) # fill
os._exit(0)
else:
pids.append(noupid)
while pids:
pid, codiSortida = os.wait()
pids.remove(pid)
print("Això és tot")
if __name__ == "__main__":
prog()
Exemple multiprocessing 1¶
Fitxer exempleMultiprocessing1.py
from f_exemple import f_exemple, dades, espera, nfills
from multiprocessing import Process
def progr():
for i in range(n_fills):
p = Process(target=f_exemple,
args=(i,
dades[i],
espera[i]))
p.start()
print("Això és tot!!!!!")
if __name__=='__main__':
progr()
Exemple multiprocessing 2¶
Fitxer exempleMultiprocessing2.py
from f_exemple import f_exemple, dades, espera, nfills
from multiprocessing import Process
def progr():
proc = []
for i in range(n_fills):
proc.append(Process(target=f_exemple,
args=(i,
dades[i],
espera[i])))
proc[-1].start()
for i in range(n_fills):
proc[i].join()
print("Això és tot!!!!!")
if __name__=='__main__':
progr()
Exemple multiprocessing 3¶
Fitxer exempleMultiprocessing3.py
from f_exemple import f_exemple, dades, espera, nfills
from multiprocessing import Pool
def progr():
with Pool(n_fills) as p:
args = ((i,
dades[i],
espera[i]) for i in range(n_fills))
r = p.starmap(f_exemple, arfgs)
print(r)
print("Això és tot!!!!!")
if __name__=='__main__':
progr()
Exemple seqüencial¶
Fitxer exempleSeq.py
import f_exemple as ex
def progr():
for i in range(ex.n_fills):
ex.f_exemple(i, ex.dades[i], ex.espera[i])
print("Això és tot!!!!!")
if __name__=='__main__':
progr()
Exemple threadings 1¶
Fitxer exempleThreadings1.py
from f_exemple import f_exemple, dades, espera, nfills
from threading import Thread
def progr():
for i in range(n_fills):
t = Thread(target=f_exemple,
args=(i,
dades[i],
espera[i]))
t.start()
print("Això és tot!!!!!")
if __name__=='__main__':
progr()
Exemple threadings 2¶
Fitxer exempleThreadings2.py
from f_exemple import f_exemple, dades, espera, nfills
import threading
class Exemple(threading.Thread):
def __init__(self, ident, calc, segons):
threading.Thread.__init__(self)
self.id = ident
self.calc = calc
self.temps= segons
def run(self):
f_exemple(self.id, self.calc, self.temps)
fils=[Exemple(i,
dades[i],
espera[i]) for i in range(n_fills)]
for fil in fils:
fil.start()
for fil in fils:
fil.join()
print("Això és tot!!!!!")
f_exemple¶
Fitxer f_exemple.py
import time
n_fills = 7
espera = n_fills * [5]
dades = n_fills * [100000]
def f_exemple(ident, dada, segons):
print('inici fil ', ident)
res = sum(range(dada))
time.sleep(segons)
print('resultat fil ', ident, ':', res)