ボトルネックの解消のためにpypyを使い、それ以外の部分にはpypyを使わないようにするにはどのようにプログラムを作るといいですか?pypyで実行した関数の出力をCPythonで動かしているプログラムで利用するにはどうするべきですか?
subprocessを使ってみました。pypyで動かす分は別ファイルfib.pyになり、そこからの標準出力を返り値として利用してます。日本語版Windowsでは標準出力はデフォルトでcp932でエンコードされるため、受け取った出力をデコードしています。邪道な感じになりましたがとりあえず動きます。改善点等ありましたら教えてください。
atest.py
import subprocess def exfunc(cmd): p = subprocess.Popen(cmd, shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE) stdout_data, stderr_data = p.communicate() return p.returncode, stdout_data.decode('cp932'), stderr_data.decode('cp932') command = "pypy3 fib.py 35" print('Returncode:%s\n35番目のフィボナッチ数:%s\nstderr:%s'%exfunc(command)) ''' Returncode:0 35番目のフィボナッチ数:9227465 stderr: '''
fib.py
import sys def fib(n): n = int(n) if n < 2: return n else: return fib(n - 1) + fib(n - 2) if __name__ == '__main__': print(fib(sys.argv[1]), end='')
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。