2013-11-01 2 views
4

나는 (Django를 ORM으로 사용하여) 작업을 기다리는 수많은 작업자가 있습니다. 내 문제는 MySQL의 wait_timeout 변수가 설정된 시간에 주어진 시간 동안 아무 작업도 없다면 MySQL 연결 시간이 초과되어 작업자가 죽는 것이다.Django에서 연결을 유지하기 위해 MySQL을 핑 (Ping)

이 문제를 해결하기위한 첫 번째 방법은 단순히 wait_timeout을 더 높은 정수로 늘리는 것이었지만 연결을 유지하는 작업이 없다면 매 30 분마다 MySQL을 ping하는 것이 더 나은 해결책이라고 생각했습니다.

제 질문은; Django ORM을 사용하여 연결을 유지하기 위해 MySQL을 ping하는 방법은 무엇입니까? 가장 좋은 방법은 무엇입니까? 그냥 간단한 바보 같은 쿼리를 수행하면됩니까? 아이디어가 필요할 때 UR 데이터베이스에 연결하는 데 그냥 더 나은 @ProblemFactory

http://dev.mysql.com/doc/refman/5.6/en/connector-python-connection-pooling.html

+0

왜 그 연결을 유지하고 싶습니까? U는 단순히 할 일이있을 때마다 연결할 수있는 직원을 개선해야합니다. – IProblemFactory

+2

http://dev.mysql.com/doc/refman/5.6/en/connector-python-connection-pooling.html –

+0

@ProblemFactory 좋은 지적. 장고와 함께 할 의사 코드가 있습니까? – Niklas9

답변

2

설정 연결 풀 또는 수동으로 작업자를 연결! 특히 그것은 30mins 같은 간격에 대해 언급했다.

while true: 
    sleep(X) 
    if some_task: 
     connect_to_DB() 
     do_something() 
+0

이것은 Django와 관련이 없지만 MySQL과 Python에 독립적으로 – Niklas9

0

에 의해 제안

+0

문제는 내가 작업이 도착할 때를 예측할 수 없다는 것입니다. 몇 시간 후에 아무 것도 없을 수도 있습니다. 그 다음에는 1,000,000 개의 작업이있을 수 있습니다. 모든 작업에 대해 다시 연결하고 싶지 않다. – Niklas9

+0

물론, '작업'을 하나의 쿼리가 아닌 전체 작업으로 정의해야한다. – IProblemFactory

+0

하나의 작업이 하나의 전체 작업으로 정의 되더라도 사용 사례의 작업 자체는 매우 작으며 그 수는 많습니다.이 정의로도 모든 작업을 다시 연결하는 것은 어리석은 짓입니다. – Niklas9

1
from django.db import connection 

connection.connection.ping() 
관련 문제