2017-06-05 27 views
6

Tôi có một số mã Python3 chạy bên trong vòng lặp sự kiện asyncio.phiên bản asyncio của `os.chmod` trong Python

Tôi muốn sử dụng chức năng của os.chmod(...), nhưng lý tưởng nhất là phiên bản không chặn này, để tôi có thể sử dụng await os.chmod(...) và tránh thực hiện cuộc gọi hệ thống chặn.

Tôi không tin có sẵn bất kỳ thư viện nào cung cấp chức năng này, ít nhất là từ những gì tôi có thể thấy.

Tôi sẽ làm cách nào để triển khai một không chặn os.chmod(...) từ đầu? Vẫn còn tốt hơn, là có một giải pháp có sẵn từ trước?

+0

Vì ngữ cảnh, tôi đang thực hiện quy trình công nhân Gunicorn, sử dụng asyncio. Gunicorn sử dụng trạng thái quay số 'fchmod' để báo hiệu sự hợp nhất của quy trình công nhân. https://github.com/benoitc/gunicorn/blob/master/gunicorn/workers/workertmp.py –

Trả lời

5

Hệ thống UNIX chưa triển khai API không đồng bộ cho tòa nhà chọc trời chmod. Vì vậy, tốt nhất bạn có thể làm là chạy nó trong một hồ bơi thread:

await loop.run_in_executor(None, os.chmod, fname, mode) 
+0

Hoàn hảo - cảm ơn rất nhiều. –

+0

Ý của bạn là: 'await loop.run_in_executer (Không, os.chmod, fname, mode)'? –

+0

@YuvalPruss Bạn có nghĩa là 'await loop.run_in_executor (Không, os.chmod, fname, mode)'? ;) –

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