プログラミングPHPで並行処理をしたい個所が出てきた。Preprocessorデータベースに挿入するデータがタイムスタンプとそれに紐づく値で、データを挿入する順番を気にしなくても良いログのようなものだ。片っ端からデータを突っ込もうとしてもデータベースに過剰にデータが挿入されるということはない。Go言語であればゴルーチンという素敵な仕様があるけれども、Go言語でsyncパッケージを使ってみるPHPには平行処理を気軽に出来る仕組みはないか?と探してみたところ、ジョブファイルを作成して、execでジョブファイルを実行すれば良いそうだ。//これでjobが並行で実行される//何らかの同期的な処理を書く※nohupでバックグラウンド実行。&を追加することで結果の扱いはスルーするこんな感じで並行処理ができた。この書き方の欠点といえば、ジョブの方の結果をメインのプロセスの方に返せないということだ。ここらへんはGo言語のゴルーチン(チャネル)は本当に良くできている。ここで一つ問題が生じた。APIからデータを取得するジョブを作成する時だ。メインのプロセスでGoogleのOAuthでログインを行った後に取得したアクセストークンを利用する場合だ。アクセストークンはセッションに格納されるけれども、並行で実行したジョブ内ではメインのプロセスのセッションが利用できない。ここで一つセッションの参照という工夫をする必要があった。//何らかの同期的な処理を書くメインのプロセスのジョブの第一引数にセッションIDを指定して、ジョブファイルの方でセッションIDを受け取りセットするという処理を追加したことで、セッションに格納された値をジョブ内でも使用できるようになった。後はジョブ内の結果をメインのプロセス内で使えるようにするだけれども、これはまだ必要に迫られていないので触れていない。PHPでジョブの結果を待つ仕組み等を考えるのであれば、Go言語やNode.jsを素直に使った方が良さそうだな。サイトで実際の栽培に落とし込んだまとめの記事の投稿を始めました。Appの操作に関する質問を下記のページで受け付けています。CMS/Shopで標準機能だけでは実装が難しい時はお気軽にご相談下さい。CMSの開発秘話を投稿しました。妻にプログラミングを教えることにした自由を求めてオープンソースのネットショップパッケージへ。毅(ツヨシ)仕事内容TwitterSlideShareYouTubeGitHubお問い合わせ大学院で植物の細胞学(主に形)を専攻し、大学院在学中(後に中退)に今で言うところのスタートアップの初期メンバーとして参画し、農薬を使わない栽培の調査と技法の開発を行っていました。CMS/Shopの開発を開始しました。※前職の話で詳しくはこちらをご覧ください。以前、神奈川県の養鶏場、株式会社コトブキ園さんで高品質な鶏糞堆肥の製造に関わらせていただきました。農機具メーカー向けに栽培で使える化学の話をしています。CMS/Shopの開発も引き続き行っていますので、サイト構築やプラグインの開発をしています。schoolの小中学生向けのプログラミング教室で教えています。