2010-09-01 25 views
5

Tôi có một vài tập lệnh cần chạy đồng thời dưới dạng các quy trình riêng biệt. Kế hoạch của tôi là có một cron job thực thi nhiều instance của các script này trong một khoảng thời gian đã định. Đây có phải là một ý tưởng tốt? Ưu điểm/khuyết điểm của phương pháp này là gì? Có bất kỳ lựa chọn nào khác mà tôi cần xem xét không?Đồng thời PHP qua Cron

Bottomline: Tôi đang cố gắng bắt chước đa luồng. Mọi điều kiện chủng tộc sẽ được xử lý qua mã (ví dụ: cài đặt trạng thái trong DB, v.v.). Các tập lệnh được yêu cầu thực hiện các tác vụ chuyên sâu (ví dụ: tạo hình thu nhỏ, v.v.).

Trả lời

5

Bạn có thể sử dụng forking. Kịch bản khởi động sẽ tải tất cả các cấu hình mặc định và khởi tạo, sau đó các tiến trình con nĩa để thực hiện quá trình xử lý. Sau đó nó có thể theo dõi các quá trình để xem liệu chúng có đang chạy hay không. http://php.net/manual/en/function.pcntl-fork.php

0

PHP không có fork()? Trong khi đó không thực sự đa luồng, nó là một cách cơ bản của đồng-thói quen.

2

Vâng, nếu bạn cần nó như một cronjob, hãy tiếp tục. Nếu bạn muốn nhiều quy trình, bạn rất có thể muốn sử dụng pcntl_fork để tạo nhiều phiên bản của cùng một tập lệnh.

1

Tùy thuộc vào tốc độ bạn muốn phản ứng với những công việc đó và nếu bạn muốn thực hiện các tác vụ xử lý chuyên sâu thì bạn cũng có thể trải ra quá trình xử lý đó bằng cách sử dụng hệ thống xếp hàng. Hãy xem Gearman hoặc beanstalkd với nhiều công nhân trên mỗi máy nếu bạn có nhiều lõi/bộ xử lý.

0

Một cách sử dụng cron là nó sẽ thực thi một bản sao tập lệnh của bạn tại khoảng thời gian bạn đặt bất kể có bao nhiêu tiến trình tập lệnh đang chạy. Điều này có nghĩa là các script cần một cách để giao tiếp với nhau để cho tối đa N script được lưu giữ đồng thời (các script thừa chỉ có thể thoát ngay lập tức).

Một giải pháp thay thế cho cron có thể là supervisord sẽ thực thi số tập lệnh có thể định cấu hình và theo dõi từng tập lệnh để mọi lần thoát đó được respawned.

Các vấn đề liên quan