[Python] pytest e classi

enrico franchi enrico.franchi a gmail.com
Mer 28 Ott 2015 17:21:49 CET


2015-10-28 14:42 GMT+00:00 Manlio Perillo <manlio.perillo a gmail.com>:

> Si, alla fine credo sia la cosa migliore, eseguendo il codice in un
> processo separato come suggerisci.
> Magari se ho tempo lo implemento per la mia libreria, anche se
> probabilmente non la userņ molto.
> Forse usando fork/vfork (e ignorando Windows) si riesce a fare anche
> in modo abbastanza semplice,
>

Non vuoi usare vfork. Su un processo piccolo (come dovrebbe essere il
runner dei test) la differenza di performance sara' 10-20% in favore di
vfork.

Il problema e' che vfork e' veramente bislacca come semantica. Tipo il
fatto che vfork ti sospende il parent finche' il child non ha fatto exec
probabilmente non e' quello che vuoi. C'e' caso che quello che guadagni in
termini di performance, lo perdi perche' il parent nel frattempo deve
aspettare a fare qualunque cosa.

Il pezzo pero' piu' fastidioso della semantica di vfork e' che qualunque
cosa tu faccia fra vfork e exec nel figlio -- ovviamente, visto che il
padre e' stoppato -- si riflette nel padre. Il che puo' essere o meno
quello che vuoi. Io non sono sicuro se fare affidamento su questo
comportamento specifico per creare il tutto sia una buona idea. Se invece
uno non lo vuole esplicitamente, secondo me e' solo una potenziale fonte di
bachi.

Aggiuntivamente non e' necessario che il modello migliore passi per exec.
Potrebbe essere piu' conveniente fare semplicemente fork (un sacco di IPC
e' piu' comoda) ed eseguire il codice del test.

Viceversa, se usi direttamente clone con opzioni opportune potresti essere
30 volte piu' veloce (sia di fork che di vfork).
Allora per prendersi lo sbatti di usare qualcosa che non e' fork, un 30x
magari vale la pena... il 20% sulla syscall, che mi aspetto sia comunque
relativamente trascurabile rispetto al tempo di tirare su il test,
eseguirlo e poi eventualmente raccogliere statistiche e simili, secondo me
non vale la pena.



-- 
.
..: -enrico-
-------------- parte successiva --------------
Un allegato HTML č stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20151028/ed32b7f7/attachment.html>


Maggiori informazioni sulla lista Python