Pages

Thursday, March 23, 2006

dl module

dl  的作用在於相容傳統  c  裡的  dlopen 他可以直接把  c  寫的  .so  抓進來用 不過有一些限制

1.  dl  中的函式  參數最多不能超過  10  個 2.  參數的型別只能是  const  str  *  /  int 3.  python  只會傳入三種相對應的值    字串  :  字串的起始位址,  即  const  str  *    None  :  NULL    Integer  : int 4.  傳回值必需要是  long

假設用  c  寫了一個簡單的  summation  funtion

long  sum(int  lb,  int  ub) {   int  s  =  0,  i;   for(  i  =  lb;  i  <=  ub;  i++  )     s  +=  i;   return  s; }

編譯成  util.so 那麼在  python  裡可以這樣引用

import  dl,  sys lib  =  dl.open('./util.so') if  not  lib:  sys.exit()

try:   if  lib.sym('sum'):  s  =  lib.call('sum',  1,  5)   print  'sum:',  s except  NameError:   print  "can't  find  function"

如果沒有資料交換  (或只需要傳回簡單資料) 這是個簡單的方案 例如說把東西丟進  c  裡處理完就存檔 這樣就很方便了 不必動用  py  extension 但通常會動用  c  就是因為需要快速運算並取回結果阿...

也許透過  shm  是個好方法


This article was originally posted on this site.

No comments:

Post a Comment