thread raspberry programa procesos hilos entre ejemplos datos con comunicacion compartir basics argumentos multithreading perl psgi

multithreading - raspberry - programa de hilos en python



¿Cómo hago para que un programa PSGI haga una inicialización costosa solo una vez por proceso, no por hilo? (1)

publicación cruzada: http://perlmonks.org/?node_id=1191821

Considere app.psgi :

#!perl use 5.024; use strictures; use Time::HiRes qw(sleep); sub mock_connect { my $how_long_it_takes = 3 + rand; sleep $how_long_it_takes; return $how_long_it_takes; } sub main { state $db_handle = mock_connect($dsn); return sub { [200, [], ["connect took $db_handle seconds/n"]] }; } my $dsn = ''dbi:blahblah''; # from config file my $app = main($dsn);

Measuring plackup ( HTTP::Server::PSGI: Accepting connections at http://0:5000/ ):

› perl -MBenchmark=timeit,timestr,:hireswallclock -E"say timestr timeit 10, sub { system q(curl http://localhost:5000) }" connect took 3.0299610154043 seconds connect took 3.0299610154043 seconds connect took 3.0299610154043 seconds connect took 3.0299610154043 seconds connect took 3.0299610154043 seconds connect took 3.0299610154043 seconds connect took 3.0299610154043 seconds connect took 3.0299610154043 seconds connect took 3.0299610154043 seconds connect took 3.0299610154043 seconds 2.93921 wallclock secs ( 0.03 usr + 0.06 sys = 0.09 CPU) @ 107.53/s (n=10)

Measuring thrall ( Starting Thrall/0.0305 (MSWin32) http server listening at port 5000 ):

› perl -MBenchmark=timeit,timestr,:hireswallclock -E"say timestr timeit 10, sub { system q(curl http://localhost:5000) }" connect took 3.77111188120125 seconds connect took 3.15455510265111 seconds connect took 3.77111188120125 seconds connect took 3.15455510265111 seconds connect took 3.77111188120125 seconds connect took 3.64333342488772 seconds connect took 3.15455510265111 seconds connect took 3.77111188120125 seconds connect took 3.85268922343767 seconds connect took 3.64333342488772 seconds 17.4764 wallclock secs ( 0.02 usr + 0.09 sys = 0.11 CPU) @ 90.91/s (n=10)

Este rendimiento no es aceptable porque la inicialización ocurre varias veces, a pesar de la variable de state . ¿Cómo se hace para que suceda solo una vez?


¿No es esto lo que hace la opción --preload-app para Starman ?