Documents

マスターワーカー(パイプ)の例。

gxpc mw ./mw.py

として実行します。

#!/usr/bin/env python
#usage:  gxpc mw ./mw.py

import os,sys

def Es(s):
   """ エラーメッセージを出力 """
   sys.stderr.write(s)
   sys.stderr.flush() 

# ファイルディスクリプタ3番と4番を開く
OUT = os.fdopen(3, "w")
IN = os.fdopen(4, "r")

# 通し番号を取得
hn = os.environ["GXP_EXEC_IDX"] 

# メッセージを3番に出力
l = "Hello from %s\n"%(hn)
OUT.write(l)
OUT.flush()
Es("%s Sent: %s"%(hn,l)) # コンソールにprint 

# 4番からメッセージを受信
# (メッセージがなくなるとブロックします)
while True:
   l = IN.readline()
   if l == "": break
   Es("%s Rcvd: %s"%(hn,l)) # メッセージを受け取ったらコンソールにprint

Cだとこんな感じです。

#include <stdio.h>
#include <stdlib.h>


int main(int args, char **argv){
 FILE *in, *out;
 char buf[256];
 int ipe, npe,i;
 if(args != 3){
   printf("Usage: gxpc mw '%s $GXP_EXEC_IDX $GXP_NUM_EXECS'\n", argv[0]);
   exit(1);
 }
 ipe = atoi(argv[1]);
 npe = atoi(argv[2]);
 fprintf(stderr, "%d boot up\n", ipe);
 out = fdopen(3, "w");
 in = fdopen(4, "r");
 fprintf(out, "Hello from %d!\n", ipe);
 fflush(out);

 for(i = 0; i < npe; i++){
   fgets(buf, 256, in);
   fprintf(stderr, "%s received <<%s>>\n", argv[1], buf);
 }
 return 0;
}
int main(int args, char **argv){
 FILE *in, *out;
 char buf[256];
 int ipe, npe,i;
 if(args != 3){
   printf("Usage: gxpc mw '%s $GXP_EXEC_IDX $GXP_NUM_EXECS'\n", argv[0]);
   exit(1);
 }
 ipe = atoi(argv[1]);
 npe = atoi(argv[2]);
 fprintf(stderr, "%d boot up\n", ipe);
 out = fdopen(3, "w");
 in = fdopen(4, "r");
 fprintf(out, "Hello from %d!\n", ipe);
 fflush(out);
 for(i = 0; i < npe; i++){
   fgets(buf, 256, in);
   fprintf(stderr, "%s received <<%s>>\n", argv[1], buf);
 }
 return 0;
}

トップ   編集 バックアップ 添付 複製 名前変更 リロード   新規 一覧 最終更新   最終更新のRSS
© 2007 Taura lab. All Rights Reserved.
Powered by Pukiwiki, styled by Kei_ / Last-modified: 2016-07-12 (火) 15:12:44 (856d)