あ! やせいの requests.exceptions.SSLErrorが とびだしてきた!
あ! やせいの requests.exceptions.SSLErrorが とびだしてきた! pyonk は どうする?
pythonの参照渡しをどうすれば回避できるのか
ときたまpythonを書いているとこれって値渡しなんだっけ、参照渡しなんだっけと分からなくなります。 たとえば
hoge = {1:1, 2:2, 3:3} print id(hoge) # 140418104920496 fuga = hoge print id(fuga) # 140418104920496 fuga.update({ 4:4 }) print hoge == fuga # True Pythonistなら常識ですよね。
どうすれば回避できるのか # 割と単純です。
hoge = {1:1, 2:2, 3:3} print id(hoge) # 140418104920496 fuga = hoge.copy() print id(fuga) # 140418107009728 fuga.update({ 4:4 }) print hoge == fuga # False print hoge # {1:1, 2:2, 3:3} print fuga # {1:1, 2:2, 3:3, 4:4} 辞書の浅いコピーを取るにはcopy_dict = dict.
Djangoでどうしても非同期でコマンドを実行したくなった
経緯 # あるサイトで、顧客に新情報をメールでお知らせしたいときに、今まではコマンド叩いて送信していたのですが、結構面倒なのでブラウザからできないものかと試行錯誤していたのです。
コマンドの設計見直せっていうのは今回は置いといてください・・・。
どうしたのか # いくつかの方法を試しました。
pythonからコマンドを叩く # まず思い浮かんだのがコマンドをnohup &でpythonから叩く。
import subprocess import shlex cmd = 'nohup sleep 10 &' subprocess.Popen(cmd) が!!! レスポンスが帰ってくるのは10秒後・・・。
つぎ!
thread化して逃げる # この前書いたような感じです。
pythonでtupleをつくる - わいがかいた
結局、レスポンスが帰ってくるのは10秒後・・・。 ここ工夫するとどうにかなるような気もする。
つぎ!!
celeryを使う # Celery - Distributed Task Queue — Celery 4.0.2 documentation
ようやく本題。
ググり始めた当初から名前を見かけてはいましたが敷居が高そうなのでスルーしてました。
実際やりはじめて少し後悔しましたし。
結構面倒くさかったので備忘録代わりに。
install # まずは本体をインストールしていきます。
pip install -U Celery
celeryはbrokerとして
Redis RabbitMQ Amazon SQS などを使うことができます。 今回はRedisを選択しました。
yum install redis
bundleも用意されているのでそれも。
pip install -U "celery[redis]"