Xin chào
Tôi phải chạy tập lệnh để tải dữ liệu lên nguồn BI. Nhưng tôi gặp lỗi này.
Tôi nên làm gì?
Nguồn dữ liệu. Lỗi. THỪA NHẬN. BỌC LƯỚI. Hết thời gian thực thi Python.
Việc thực thi tập lệnh đã bị chấm dứt do tập lệnh đã chạy trong hơn 7200000 mili giây.
Chi tiết.
DataSourceKind=Python
DataSourcePath=Python
Message=Python hết thời gian thực hiện.
Quá trình thực thi tập lệnh đã bị chấm dứt do tập lệnh đã chạy trong hơn 7200000 mili giây.
ErrorCode=-2147467259
ExceptionType=Microsoft. Power BI. viết kịch bản. con trăn. ngoại lệ. Ngoại lệ ScriptTimeout của Python
Blog kỹ thuật
Triển khai cụm phân mảnh MongoDB trong Ubuntu
Selenium sử dụng màn hình ảo trong Ubuntu
Thiết lập cấu hình NGINX [với uWSGI]
MongoDB sang Apache Drill to Apache Superset
Cách gửi nhật ký Nginx tới cơ sở dữ liệu SQL
Hết thời gian thực thi trên các hàm Python
Cách tạo dịch vụ Systemd trong Linux
Django. bắt ngoại lệ và xử lý lỗi tùy chỉnh
Tạo người dùng và cơ sở dữ liệu trong PostgreSQL
Cách thay đổi mã hóa cơ sở dữ liệu PostgreSQL thành UTF8
Cách nhận tham số truy vấn/giá trị chuỗi từ URL bằng JavaScript
Thiết lập Hadoop trong các phiên bản AWS EC2
Cách dọn dẹp các bộ dữ liệu đã chết và giám sát PostgreSQL [sử dụng VACUUM]
Giám sát không gian đĩa và hiệu suất của máy chủ của bạn
Cách bảo mật máy chủ từ xa PostgreSQL của bạn
Kết quả Google được tùy chỉnh và tốt hơn. Truy vấn4all. com
Bắt đầu, chạy và dừng các phiên bản AWS EC2
Cách chạy tập lệnh sau khi khởi động trong Linux
Kết nối mạng [tường lửa] bằng Iptables
PostgreSQL trên EC2 [Ubuntu] trong AWS
Django. Chuyển dữ liệu từ Sqlite sang cơ sở dữ liệu khác
Django, cần tây và RabbitMQ
Python3 và MongoDB sử dụng Docker
LetsEncrypt với Django và Heroku
thiết lập SEO
Django - Triển khai trên AWS
Django1 của tôi. 10 Cài đặt
Mac Thiết lập để phát triển web Django
Thiết lập và triển khai Django Full Stack
Django - Triển khai trên Heroku
Tạo người dùng có quyền truy cập ssh
Blog phi kỹ thuật
Máy tính thế chấp và phân tích
Chi tiết và máy tính thuế tiền lương của Đức
công cụ ngân hàng
Đôi khi có những điều kiện mà lệnh gọi hàm không thể quay lại trong một khoảng thời gian cần thiết và sẽ gây ra hành vi không mong muốn. Ví dụ: việc đọc tệp có thể mất nhiều thời gian hơn dự kiến và khiến việc thực thi mã không có sự kiểm soát thích hợp đối với những việc cần làm khi tình huống như vậy xảy ra. Điều này có thể tồi tệ hơn nếu lời gọi hàm nói trên hướng đến một thư viện bên ngoài mà chúng ta không thể kiểm soát
Python có một mô-đun tiện lợi được gọi là tín hiệu hiển thị số Tín hiệu UNIX và cách đăng ký gọi lại cho từng tín hiệu. Trong số các Tín hiệu UNIX có sẵn, điều khiến chúng tôi quan tâm trong tình huống cụ thể này là tín hiệu SIGALRM cho phép chúng tôi loại bỏ đồng hồ báo thức cấp hệ điều hành sẽ gửi tín hiệu đến quy trình gọi sau số giây đã đặt. Chúng ta có thể sử dụng chức năng này [tất nhiên là chỉ có trong UNIX] để đặt thời gian chờ trước khi gọi hàm với khả năng bị treo hoặc mất thời gian không mong muốn để kết thúc
Nếu bạn chạy mã Python này, bạn sẽ thấy đầu ra tương tự như sau
Before: 22:10
LEEEEROYYY JENKINSSSSS!!!
Received SIGALRM
Gotcha!
After: 22:20
Hãy để chúng tôi đi bộ qua mã
Trước tiên, hãy xem chức năng được cho là chạy dài. Điều này làm chỉ đơn giản là đợi trong 60 giây trước khi tiếp tục. Điều này là để mô phỏng một tệp bị chặn đọc hoặc kết nối máy chủ bị treo
Chúng ta cần yêu cầu mô-đun tín hiệu thực thi chức năng của chính chúng ta khi quy trình nhận được tín hiệu SIGALRM. Vì vậy, trước tiên hãy viết một hàm xử lý
Lưu ý rằng trong hàm timeout_handler, chúng tôi đang đưa ra một ngoại lệ. Điều này là để làm cho quá trình ra quyết định của chúng tôi dễ dàng hơn một chút. Thêm về điều đó sau. Bây giờ, hãy đăng ký điều này với tín hiệu SIGALRM
signal.signal[signal.SIGALRM, timeout_handler]
Bây giờ khi quá trình Python này nhận được tín hiệu SIGALRM, nó sẽ thực thi hàm timeout_handler
dấu hiệu. báo động [10] yêu cầu HĐH gửi SIGALRM sau 10 giây kể từ thời điểm này trở đi. Sau khi đặt đồng hồ báo thức, chúng tôi gọi chức năng chạy dài
10 giây sau khi gọi hàm long_function, quá trình thực thi sẽ bị gián đoạn và hàm timeout_handler sẽ đưa ra ngoại lệ FUBAR. Chúng tôi đang nắm bắt điều đó ở dòng 6 và dựa vào đó chúng tôi có thể đưa ra quyết định về những việc cần làm vì chức năng của chúng tôi có khả năng bị treo trên thực tế dường như bị treo và không chấm dứt theo cách lành mạnh hoặc không lành mạnh
Lưu ý rằng chúng tôi đặt báo thức thành 0 giây sau khi hoàn tất. Đó là để làm một việc, hủy báo thức đã đặt trước đó [mặc dù trong trường hợp của chúng tôi, điều đó thậm chí không thành vấn đề]
Nếu chúng tôi kiểm tra lại đầu ra của chương trình này, bạn sẽ thấy rằng chúng tôi đã nhận được SIGALRM chính xác sau 10 giây
Before: 22:10
LEEEEROYYY JENKINSSSSS!!!
Received SIGALRM
Gotcha!
After: 22:20
Rõ như chuông phải không?
Hãy thực hiện một số điều chỉnh. Đừng đặt đồng hồ báo thức hệ điều hành. Hãy tự gửi tín hiệu
Chúng tôi đã nhận xét cài đặt đồng hồ báo thức ở dòng 15 và ở dòng 13, chúng tôi đã in ra ID quy trình của quy trình Python. Chúng tôi sẽ gửi tín hiệu SIGALRM bằng lệnh kill tới ID tiến trình đó
Mở hai thiết bị đầu cuối và chạy đoạn mã trên trong một thiết bị đầu cuối. Lưu ý ID tiến trình và trong thiết bị đầu cuối khác thực hiện lệnh sau
kill -14 {pid}
14 là số nguyên của tín hiệu SIGALRM. Lưu ý rằng khoảng thời gian giữa lúc bắt đầu cuộc gọi long_function và ngoại lệ FUBAR khác nhau dựa trên thời gian chúng tôi gửi tín hiệu SIGALRM
Một thực tế quan trọng cần lưu ý khi sử dụng mô-đun tín hiệu là nó không hoạt động tốt trong luồng đa luồng. Cuộc gọi lại phải được đăng ký trong luồng chính và luồng chính cũng sẽ nhận được cảnh báo. Vì vậy, nếu bạn đang cố gắng khớp các mô-đun tín hiệu và luồng với nhau, bạn sẽ thường thấy ngoại lệ sau đây được đưa ra