2010-01-12 29 views
5

Xin chào tràn ngăn xếp: Đôi khi trình đọc, áp phích lần đầu tiên.IPC giữa ứng dụng python và được tiêm DLL

Bối cảnh:

hộp Windows chạy XP SP3, sớm được nâng cấp lên Windows Seven (MSDNAA < 3)

Tôi có một DLL tiêm mà được chu kỳ bằng cách gắn một hàm đó được gọi là hàng ngàn số lần một giây.

Tôi muốn giao tiếp/kiểm soát tệp DLL này thông qua ứng dụng python. Về cơ bản, DLL thực hiện công việc, ứng dụng python cung cấp bộ não/quyết định.

Kế hoạch trò chơi của tôi để làm điều này, là tôi sẽ có một truy cập và một tuyên bố nếu trong DLL. Mỗi lần hàm hooked được gọi, counter ++ và sau đó nhảy trở lại hàm ban đầu cho đến khi một cái gì đó giống như (counter == 250) {// dostuff(); }. Mặc dù vậy, mặc dù vậy, nó sẽ cho phép ứng dụng đích chạy hầu như không bị cản trở, nhưng vẫn cho phép tôi làm những điều thú vị.

Vấn đề:

Tôi đang ở một mất mát hoàn toàn vào phương pháp IPC tôi nên sử dụng để làm truyền thông. Chúng tôi có ổ cắm, bộ nhớ chia sẻ, đường ống, filemapping (?), RPC, và những thứ khác (dường như) bí truyền như viết vào clipboard.

Tôi KHÔNG BAO GIỜ thực hiện bất kỳ loại IPC nào ngoài các ví dụ về đồ chơi.

tôi khá chắc chắn tôi cần cái gì đó:

  • thể xử lý nói chuyện qua lại giữa trăn và một DLL
  • Không chặn/chờ
  • có thể kiểm tra chờ đợi dữ liệu, và tiếp tục nếu không có bất kỳ
  • Nếu ổ khóa có liên quan, có thể tiếp tục thay vì chờ
  • không chi phí rất nhiều thời gian để đọc/ghi quá

Trợ giúp? Cảm ơn bạn đã dành thời gian, tôi hy vọng tôi đã cung cấp đủ thông tin chung và không vi phạm bất kỳ quy ước nào được chấp nhận.

Tôi muốn thêm rằng hộp câu hỏi liên quan rất tuyệt và tôi đã nghiên cứu kỹ trước khi đăng.

Trả lời

2

Hãy thử các ổ cắm. Nhu cầu của bạn về bản chất là một yêu cầu của hoạt động không đồng bộ; Python có mô-đun asyncore cho IO không đồng bộ trên ổ cắm. Đồng thời, nó không giống như stdlib của Python có thể xử lý không đồng bộ các thứ IPC khác, vì vậy tôi không khuyên bạn nên sử dụng chúng.

1

Nếu bạn không quan tâm đến thời gian thực, bạn có thể sử dụng hệ thống tệp để liên lạc: tệp nhật ký cho đầu ra của DLL và tệp cấu hình được đọc mọi lúc và sau đó thay đổi hành vi DLL.

+1

Sử dụng tệp nhật ký là * không * một IPC. – ulidtko

+0

@ulidtko Hệ thống tệp là hình thức đồng bộ hóa IPC lâu đời nhất và đáng tin cậy nhất. Đó là lý do tại sao tiêu chuẩn POSIX có cùng API cho tất cả các dạng IPC. Vì hệ điều hành ** phải ** quản lý tính nhất quán và đồng bộ hóa trong các hoạt động hệ thống tệp (hoặc không được gọi là hệ điều hành), hệ thống tệp là triển khai dễ dàng nhất của IPC để sử dụng cho các chương trình không phải hệ điều hành. Hãy thử 'ls/var/run/*.pid' lần sau bạn có quyền truy cập vào hệ thống * nix. – Apalala

+1

In ấn thậm chí còn là hình thức cũ và đáng tin cậy hơn ... lưu trữ thông tin trên giấy. OS ** phải ** quản lý tính nhất quán của nội dung sẽ được in và mọi người đều có thể quản lý mọi đồng bộ hóa cần thiết. Tại sao bạn không thử in "Hello world!" trên giấy, và sau đó quét và OCR-ing nó để kiểm soát chương trình của bạn? Xin lỗi, nhưng bình luận của bạn không chỉ là một đối số. Máy in nên in tài liệu, hệ thống tập tin nên lưu trữ tập tin, ổ cắm ống-shmem nên cung cấp các cách để thực hiện IPC. – ulidtko

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