2015-08-03 40 views
6

Tôi đã viết một chương trình đồ họa Kivy trên Raspberry Pi, với hệ điều hành KivyPie (Linux được cấu hình sẵn để phát triển Kivy).Raspberry Pi Python (Kivy) cực kỳ chậm với sudo

Vì một số lý do, nó chạy rất chậm nếu bắt đầu bằng sudo. Thông thường, chạy "python main.py", chương trình chạy ở khoảng 30 chu kỳ mỗi giây. Tuy nhiên, nếu tôi thực hiện "sudo python main.py", nó sẽ chạy chậm như 1 chu kỳ mỗi 5-10 giây.

Tôi cần sử dụng sudo để truy cập GPIO của Raspberry. (trừ khi tôi thử một số cách khác để làm điều đó, mà tôi thấy mọi người thảo luận).

Tôi quan tâm, tuy nhiên, điều gì có thể là nguyên nhân gây ra sự sụt giảm hiệu suất lớn như vậy với sudo? Và có thể làm việc xung quanh điều đó không?

PS: Chạy cùng một chương trình trên máy tính của tôi (Linux) có và không có sudo dường như không gây ra vấn đề như vậy. Chỉ trên quả mâm xôi.

+1

Đã kiểm tra đầu ra của thiết bị đầu cuối Kivy trong khi chạy có và không có "sudo". Có vẻ như với sudo Kivy không thể tải "egl_rpi" và sử dụng phiên bản OpenGL khác - chạy bình thường nó sử dụng OpenGL ES 2.0, trong khi dưới sudo nó sử dụng một số "OpenGL 2.1 Mesa", chạy với phần mềm rasterizer - vì vậy đó là nguyên nhân của vấn đề. Tôi vẫn không biết cách làm việc xung quanh điều đó. (và tại sao nó không tải "egl_rpi" với sudo). – XArgon

Trả lời

0

Vâng, tôi sẽ gọi vấn đề này được giải quyết, ngay cả khi vẫn còn một vài câu hỏi.

Dưới đây là những điểm mấu chốt:

  • Sự suy thoái là do Kivy không có khả năng tải các trình điều khiển video thích hợp dưới "sudo", và sử dụng phần mềm dựng hình để thay thế.
  • Tôi chưa tìm ra lý do tại sao trình điều khiển không tải với sudo hoặc cách khắc phục. Tuy nhiên ...
  • Sau khi biên dịch chương trình bằng Pyinstaller, mọi thứ đều hoạt động tốt. Các thực thi có thể được bắt đầu với sudo, GPIO đang làm việc, Kivy tải trình điều khiển thích hợp, mọi thứ hoạt động nhanh, như nó cần.

Tóm lại, lý do của sự cố ban đầu đã được tìm thấy, không khắc phục được việc khởi chạy chương trình trực tiếp với Python nhưng vấn đề đã bị xóa bằng cách biên dịch chương trình bằng Pyinstaller. (vẫn không phải là cách thuận tiện để gỡ lỗi.)

1

Sự cố là Kivy đang sử dụng tệp config.ini thay thế cho người dùng gốc chứ không phải tệp bạn có trong số ~/.kivy/config.ini.

Ở phía trên cùng của file python của bạn, bạn có thể thêm những điều sau để buộc nó để sử dụng cửa sổ egl_rpi:

import os 
os.environ['KIVY_WINDOW'] = 'egl_rpi' 

Ngoài ra, bạn có thể sao chép tập tin này qua vào thư mục gốc sử dụng:

sudo cp ~/.kivy/config.ini /root/.kivy/config.ini