<Github, Cheatsheet> Gist をした。
Gist
をしてみた。
https://gist.github.com/Nekoyuki/8c41c5d135f8b4b47d8f462381febffc
上のやつをクローンするには、、、
git clone https://gist.github.com/Nekoyuki/8c41c5d135f8b4b47d8f462381febffc.git
とするらしい。
<Python, multiprocessing> マルチプロセスを試してみた。
ちと、必要があり、multiprocessing
モジュールを試してみた。
なにやら、戻り値return value
を取るには、Pool
とmap
を使わないといけない。。。
なにやら、map
の場合は、引数が1つしかとれないから、ラッパー関数を作ってくるまないといけない。。。うんぬん。。。
難しい。。。
で、出来たコードはこり。
こいつを流してみた。
Pool(1)
つまり、プロセス数が1つの場合。
% python multiprocessing_args.py 1 1.1610000133514404 [5, 7, 9, 11, 13, 15, 17, 19, 21, 23] time:0.1299998760223389 r: 5 pid:18512 time:0.2300000190734863 r: 7 pid:18512 time:0.3299999237060547 r: 9 pid:18512 time:0.4299998283386230 r: 11 pid:18512 time:0.5309998989105225 r: 13 pid:18512 time:0.6309998035430908 r: 15 pid:18512 time:0.7309999465942383 r: 17 pid:18512 time:0.8309998512268066 r: 19 pid:18512 time:0.9309999942779541 r: 21 pid:18512 time:1.0309998989105225 r: 23 pid:18512
Pool(3)
つまり、プロセス数が3つの場合。
% python multiprocessing_args.py 3 0.562000036239624 [5, 7, 9, 11, 13, 15, 17, 19, 21, 23] time:0.1300001144409180 r: 9 pid:11764 time:0.2300000190734863 r: 11 pid:11764 time:0.3300001621246338 r: 17 pid:11764 time:0.1300001144409180 r: 5 pid:19352 time:0.2300000190734863 r: 13 pid:19352 time:0.3300001621246338 r: 21 pid:19352 time:0.1300001144409180 r: 7 pid:14840 time:0.2300000190734863 r: 15 pid:14840 time:0.3300001621246338 r: 19 pid:14840 time:0.4120001792907715 r: 23 pid:14840
にゃるほど。。。
お世話になったところ。
17.2. multiprocessing — プロセスベースの並列処理 — Python 3.6.3 ドキュメント
ちなみに、昔、ちとやった、multithread
はこり。
<Python, pandas> to_csvでUnicodeEncodeError
Flask
さん中で、subprocess
を使って、Python
スクリプトを呼び出す。
呼び出されたPython
スクリプト中で、pandas.DataFrame.to_csv()
を使って、データフレームをcsv
出力。
データフレーム中に入っているデータが、元UTF-8
だった場合、かつFlask
環境がLANG=ascii
だと、
UnicodeEncodeError
を吐き出す。。。
ちょーはまる。。。
この記事が参考になる。
PythonのUnicodeEncodeErrorを知る - HDEラボ
結局、データフレーム中のデータをあらかじめascii
にしてエラーを出さないようにした。。。
<Python, requests> requestsでSSLError
最近requests
でSSLError
が出るようになってしまった。。。
In [10]: import requests In [11]: r = requests.get(url, verify=False)
ってやって、verify
を無視すれば、少々せきゅりちーに問題ありだがアクセスできるらしい。。。
で、、requests
が呼ばれるモジュールの場合は、、、
In [12]: import requests.api ...: import warnings ...: ...: ...: def requestspatch(method, url, **kwargs): ...: kwargs['verify'] = False ...: return _origcall(method, url, **kwargs) ...: ...: _origcall = requests.api.request ...: requests.api.request = requestspatch ...: warnings.warn('Pathched requests: SSL verification disabled!')
ってやれば、いいらしい。
とりあえず、アクセスはできるが、、、
もうちょいなんとかならんもんかにょー。。。
もうちょい調べてみた。。。
pip install -U certifi
してみたけど、だめだったす。。。
verify=False
で対応するしかないのか? 今のところ???
2017/11/16、、もうちょい追加。
SSLErrorメッセージがうっとうしいときは、下記で消せる。 (python3.6の場合)
from requests.packages.urllib3.exceptions import InsecureRequestWarning requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
<Python, pandas, pyOpenSSL> 久々に使ったらエラーだらけ。。。
pandas-datareader
を久々に使ったらエラーだらけだった。。。
その1 ImportError
In [17]: import pandas as pd In [18]: import pandas_datareader.data as web : ImportError: cannot import name 'PandasError' pd.__version__ Out[19]: '0.20.2'
pandas==0.20.2
に対して、pandas_datareader
が古い0.2.0
とだめ、アップデート要。
その2 Error...x509 certificate...
In [20]: from datetime import datetime In [28]: df = web.DataReader("TXN", 'yahoo', datetime(2015,1,1),datetime(2016,7,1)) : Error: [('system library', 'fopen', 'No such file or directory'), ('BIO routines', 'BIO_new_file', 'no such file'), ('x509 certificate routines', 'X509_load_cert_crl_file', 'system lib')]
試した結果、pyOpenSSL
古い16.2.0
とだめらしい。。。
結局下記モジュールをアップデートしたっす。。。
pyOpenSSL=17.3.0 pandas-datareader==0.5.0 pip 8.1.1