2010-07-09 4 views
14

Tôi có một quá trình đọc từ một tệp (sử dụng file.read()) và một quá trình đang ghi vào cùng một tệp (file.write()). Vấn đề là nó không hoạt động - tôi không nhận được lỗi nhưng chúng không thể hoạt động cùng một lúc. Tôi đã thử thực hiện thao tác đọc và ghi không chặn và sau đó xả luồng, như sau:Hai quy trình đọc/ghi vào cùng một tệp Python

fcntl.fcntl(file, fcntl.F_SETFL, os.O_NONBLOCK) 
file.write(msg) 
file.flush() 

Tôi hoàn toàn hiểu nhầm không? Làm thế nào một người nên hoàn thành việc viết và đọc một tập tin từ các quy trình khác nhau?

Trả lời

15

test1.py

import os 
f = open('txt.txt', 'a', os.O_NONBLOCK) 
while 1: 
     f.write('asd') 
     f.flush() 

test2.py

import os 
f = open('txt.txt', 'r', os.O_NONBLOCK) 
while 1: 
    print f.read(3) 

này hoạt động tốt đối với tôi.

+0

Vâng, điều này cũng tốt cho tôi, cảm ơn. – Andreas

+1

Lưu ý rằng os.O_NONBLOCK không khả dụng trong Windows. – yoyo

8

Có lý do nào để sử dụng tệp chung không? Giao tiếp giữa các quá trình có thể dễ dàng hơn nhiều khi sử dụng sockets.

+2

Bạn chắc chắn có một điểm. Ban đầu tôi nghĩ về cách làm này, nhưng thay đổi suy nghĩ của tôi và đi đến tập tin i/o, và một khi tôi gặp vấn đề và bắt đầu đấu vật với nó, tôi sắp đến điểm mà tôi muốn giải quyết nó: P. Cảm ơn câu trả lời vẫn còn. – Andreas