<Python, multiprocessing> マルチプロセスを試してみた。

ちと、必要があり、multiprocessingモジュールを試してみた。

なにやら、戻り値return valueを取るには、Poolmapを使わないといけない。。。
なにやら、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

にゃるほど。。。

お世話になったところ。

qiita.com

note.crohaco.net

17.2. multiprocessing — プロセスベースの並列処理 — Python 3.6.3 ドキュメント

ちなみに、昔、ちとやった、multithreadはこり。

nekoyukimmm.hatenablog.com

<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

最近requestsSSLErrorが出るようになってしまった。。。

In [10]: import requests

In [11]: r = requests.get(url, verify=False)

ってやって、verifyを無視すれば、少々せきゅりちーに問題ありだがアクセスできるらしい。。。

hige-sun.net

で、、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!')

ってやれば、いいらしい。

stackoverflow.com

とりあえず、アクセスはできるが、、、
もうちょいなんとかならんもんかにょー。。。

もうちょい調べてみた。。。

stackoverflow.com

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)

stackoverflow.com

<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