FastNetMon

Показаны сообщения с ярлыком Multithreading. Показать все сообщения
Показаны сообщения с ярлыком Multithreading. Показать все сообщения

среда, 14 марта 2012 г.

Пример многопроцессного приложения на PHP с использованием pcntl_fork

Код:
# based on: http://php.net/manual/ru/function.pcntl-fork.php
$worker_processes = 5;
$child_processes = array();

for ($i = 0; $i < $worker_processes; $i++) {

    $child_pid = pcntl_fork();
    
    if ($child_pid == -1) {
        die ("Can't fork process");
    } elseif ($child_pid) {
        print "Parent, created child: $child_pid\n";
        $child_processes[] = $child_pid;     
    
        # В данный момент все процессы отфоркнуты, можно начать ожидание
        if ($i == ( $worker_processes -1 ) ) {
            foreach ($child_processes as $process_pid) {
                # Ждем завершение заданного дочернего процесса
                $status = 0;
                pcntl_waitpid($process_pid, &$status); 
            }
        }
    } else {
        print "Child $i\n";
        sleep(10 + $i);
    
        # Если здесь не будет exit, то foreach заработает и здесь
        exit(0);
    }

}


Алгоритм - мастер-процесс запускает 5 дочерних процессов и ждет окончание их всех, после этого он сам завершает свою работу.

пятница, 16 декабря 2011 г.

Простейшее многопоточное приложение на Python

#!/usr/bin/python

from threading import Thread
import time

class testThread(Thread):
def __init__(self, number):
Thread.__init__(self)
self.number = number
def run(self):
time.sleep(2)
print "Hello from thread %d" % self.number


threads_list = []
for i in range (1,10):
test_thread_object = testThread(i)
threads_list.append(test_thread_object)
test_thread_object.start()

for thread in threads_list:
thread.join()

Вот трейс исполнения:
time python threads.py
Hello from thread 3Hello from thread 1
Hello from thread 5

Hello from thread 6
Hello from thread 4Hello from thread 2
Hello from thread 7Hello from thread 9

Hello from thread 8


real 0m2.050s
user 0m0.035s
sys 0m0.015s

Вообще, очень красиво и лаконично все. Да и по отзывам, в отличие от Перла, у Питона с многопоточностью все хорошо.

Источники: http://www.wellho.net/solutions/python-python-threads-a-first-example.html и http://docs.python.org/library/threading.html#thread-objects