導航:首頁 > 編程語言 > pythonmmap模塊

pythonmmap模塊

發布時間:2022-08-26 03:06:37

❶ 如何用python一門語言通吃高性能並發,GPU計算和深度學習

第一個就是並發本身所帶來的開銷即新開處理線程、關閉處理線程、多個處理線程時間片輪轉所帶來的開銷。

實際上對於一些邏輯不那麼復雜的場景來說這些開銷甚至比真正的處理邏輯部分代碼的開銷更大。所以我們決定採用基於協程的並發方式,即服務進程只有一個(單cpu)所有的請求數據都由這個服務進程內部來維護,同時服務進程自行調度不同請求的處理順序,這樣避免了傳統多線程並發方式新建、銷毀以及系統調度處理線程的開銷。基於這樣的考慮我們選擇了基於Tornado框架實現api服務的開發。Tornado的實現非常簡潔明了,使用python的生成器作為協程,利用IOLoop實現了調度隊列。

第二個問題是資料庫的性能,這里說的資料庫包括MongoDB和Redis,我這里分開講。

先講MongoDB的問題,MongoDB主要存儲不同的用戶對於驗證的不同設置,比如該顯示什麼樣的圖片。
一開始每次驗證請求都會查詢MongoDB,當時我們的MongoDB是純內存的,同時三台機器組成一個復制集,這樣的組合大概能穩定承載八九千的qps,後來隨著我們驗證量越來越大,這個承載能力逐漸就成為了我們的瓶頸。
為了徹底搞定這個問題,我們提出了最極端的解決方案,乾脆直接把資料庫中的數據完全緩存到服務進程里定期批量更新,這樣查詢的開銷將大大降低。但是因為我們用的是Python,由於GIL的存在,在8核伺服器上會fork出來8個服務進程,進程之間不像線程那麼方便,所以我們基於mmap自己寫了一套夥伴演算法構建了一個跨進程共享緩存。自從這套緩存上線之後,Mongodb的負載幾乎變成了零。
說完了MongoDB再說Redis的問題,Redis代碼簡潔、數據結構豐富、性能強大,唯一的問題是作為一個單進程程序,終究性能是有上限的。
雖然今年Redis發布了官方的集群版本,但是經過我們的測試,認為這套分布式方案的故障恢復時間不夠優秀並且運維成本較高。在Redis官方集群方案面世之前,開源世界有不少proxy方案,比如Twtter的TwemProxy和豌豆莢的Codis。這兩種方案測試完之後給我們的感覺TwemProxy運維還是比較麻煩,Codis使用起來讓人非常心曠神怡,無論是修改配置還是擴容都可以在配置頁面上完成,並且性能也還算不錯,但無奈當時Codis還有比較嚴重的BUG只能放棄之。
幾乎嘗試過各種方案之後,我們還是下決心自己實現一套分布式方案,目的是高度貼合我們的需求並且運維成本要低、擴容要方便、故障切換要快最重要的是數據冗餘一定要做好。
基於上面的考慮,我們確定基於客戶端的分布式方案,通過zookeeper來同步狀態保證高可用。具體來說,我們修改Redis源碼,使其向zookeeper注冊,客戶端由zookeeper上獲取Redis伺服器集群信息並根據統一的一致性哈希演算法來計算數據應該存儲在哪台Redis上,並在哈希環的下一台Redis上寫入一份冗餘數據,當讀取原始數據失敗時可以立即嘗試讀取冗餘數據而不會造成服務中斷。

❷ 如何在 Python 中進行跨進程跨腳本同步

既然是兩個腳本,想必就是兩個 python 進程了
IPC 的話基本沒有簡單的解決方案= =
基本上簡單的就是文件和埠了吧= =
跨平台的話,像你說的 Windows 有 mutex 的介面,但是 linux 還有 mmap 呢,不過這兩個都不能算跨平台了

❸ 有文件A.py和B.py,在A中使用StringIO.StringIO(),寫入一些文本至緩存,那麼B如何獲得並修改

按照你的說法「兩個文件互不引用包含」,就相當於是兩個獨立執行的程序,但是由於StringIO是內存buffer,所以無法直接被其它程序使用。
而,你的需求「也不要創建具體的文件(如txt、csv等等),只是通過操作內存來實現」是不靠譜的。
如果可以創建文件,你可以將A中內存通過mmap(IPC進程間通信的一種方式,python有這個模塊)的映射到一個文件,B程序訪問這個文件就相當於訪問A的內存

android 手機 地圖 定位 編程 如何獲取 定位的地點 的圖片 和 文字 信息

最近開發中使用的是網路地圖android SDK:
1、初始化地圖
2、注冊定位監聽器,初始化Location模塊
3、初始化定點陣圖層;啟用定位,啟用指南針,最後把定點陣圖層添加到地圖中。附簡單代碼:

//mMapView = (MapView) findViewById(R.id.bmapsView);
mMapView = new MapView(this); //初始化一個mapView 存放Map
mMapView.setBuiltInZoomControls(true);// 設置啟用默認的縮放控制項

locationManager = mBMapMan.getLocationManager();
/*
* 由於LocationListener獲取第一個位置修正的時間會很長,為了避免用戶等待,
* 在LocationListener獲取第一個更精確的位置之前,應當使用getLocationInfo() 獲取一個緩存的位置
*/
Location location = locationManager.getLocationInfo();
locationManager.requestLocationUpdates(this);

mMapController = mMapView.getController();// 得到mMapView的控制權,可以用它控制和驅動平移和縮放
if (location != null) {
mMapController.setCenter(new GeoPoint(
(int) (location.getLatitude() * 1E6), (int) (location
.getLongitude() * 1E6)));
}
mMapController.setZoom(12);// 設置地圖zoom級別

MyLocationOverlay mylocTest = new MyLocationOverlay(this, mMapView);
mylocTest.enableMyLocation();
mylocTest.enableCompass();
mMapView.getOverlays().add(mylocTest);
@Override
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub

if (location != null) {
mMapController.animateTo(new GeoPoint(
(int) (location.getLatitude() * 1E6), (int) (location
.getLongitude() * 1E6)));
}
}

如果你想點擊定位地點,顯示信息,你需要去擴展MyLocationOverlay圖層,它裡面有個public boolean onTap(GeoPoint p, MapView map) {}方法,是處理點擊事件的。

有問題,可以與我聯系,共同探討。

❺ 如何將jpg或bmp轉換成mmap格式

由操作系統實現的所有系統調用所構成的集合即程序介面或應用編程介面(Application Programming Interface,API)。是應用程序同系統之間的介面。

Linux系統調用,包含了大部分常用系統調用和由系統調用派生出的的函數。

一、進程式控制制:

fork 創建一個新進程

clone 按指定條件創建子進程

execve 運行可執行文件

exit 中止進程

_exit 立即中止當前進程

getdtablesize 進程所能打開的最大文件數

getpgid 獲取指定進程組標識號

setpgid 設置指定進程組標志號

getpgrp 獲取當前進程組標識號

setpgrp 設置當前進程組標志號

getpid 獲取進程標識號

getppid 獲取父進程標識號

getpriority 獲取調度優先順序

setpriority 設置調度優先順序

modify_ldt 讀寫進程的本地描述表

nanosleep 使進程睡眠指定的時間

nice 改變分時進程的優先順序

pause 掛起進程,等待信號

personality 設置進程運行域

prctl 對進程進行特定操作

ptrace 進程跟蹤

sched_get_priority_max 取得靜態優先順序的上限

sched_get_priority_min 取得靜態優先順序的下限

sched_getparam 取得進程的調度參數

sched_getscheler 取得指定進程的調度策略

sched_rr_get_interval 取得按RR演算法調度的實時進程的時間片長度

sched_setparam 設置進程的調度參數

sched_setscheler 設置指定進程的調度策略和參數

sched_yield 進程主動讓出處理器,並將自己等候調度隊列隊尾

vfork 創建一個子進程,以供執行新程序,常與execve等同時使用

wait 等待子進程終止

wait3 參見wait

waitpid 等待指定子進程終止

wait4 參見waitpid

capget 獲取進程許可權

capset 設置進程許可權

getsid 獲取會晤標識號

setsid 設置會晤標識號

二、文件系統控制

1、文件讀寫操作

fcntl 文件控制

open 打開文件

creat 創建新文件

close 關閉文件描述字

read 讀文件

write 寫文件

readv 從文件讀入數據到緩沖數組中

writev 將緩沖數組里的數據寫入文件

pread 對文件隨機讀

pwrite 對文件隨機寫

lseek 移動文件指針

_llseek 在64位地址空間里移動文件指針

p 復制已打開的文件描述字

p2 按指定條件復制文件描述字

flock 文件加/解鎖

poll I/O多路轉換

truncate 截斷文件

ftruncate 參見truncate

umask 設置文件許可權掩碼

fsync 把文件在內存中的部分寫回磁碟

2、文件系統操作

access 確定文件的可存取性

chdir 改變當前工作目錄

fchdir 參見chdir

chmod 改變文件方式

fchmod 參見chmod

chown 改變文件的屬主或用戶組

fchown 參見chown

lchown 參見chown

chroot 改變根目錄

stat 取文件狀態信息

lstat 參見stat

fstat 參見stat

statfs 取文件系統信息

fstatfs 參見statfs

readdir 讀取目錄項

getdents 讀取目錄項

mkdir 創建目錄

mknod 創建索引節點

rmdir 刪除目錄

rename 文件改名

link 創建鏈接

symlink 創建符號鏈接

unlink 刪除鏈接

readlink 讀符號鏈接的值

mount 安裝文件系統

umount 卸下文件系統

ustat 取文件系統信息

utime 改變文件的訪問修改時間

utimes 參見utime

quotactl 控制磁碟配額

三、系統控制

ioctl I/O總控制函數

_sysctl 讀/寫系統參數

acct 啟用或禁止進程記賬

getrlimit 獲取系統資源上限

setrlimit 設置系統資源上限

getrusage 獲取系統資源使用情況

uselib 選擇要使用的二進制函數庫

ioperm 設置埠I/O許可權

iopl 改變進程I/O許可權級別

outb 低級埠操作

reboot 重新啟動

swapon 打開交換文件和設備

swapoff 關閉交換文件和設備

bdflush 控制bdflush守護進程

sysfs 取核心支持的文件系統類型

sysinfo 取得系統信息

adjtimex 調整系統時鍾

alarm 設置進程的鬧鍾

getitimer 獲取計時器值

setitimer 設置計時器值

gettimeofday 取時間和時區

settimeofday 設置時間和時區

stime 設置系統日期和時間

time 取得系統時間

times 取進程運行時間

uname 獲取當前UNIX系統的名稱、版本和主機等信息

vhangup 掛起當前終端

nfsservctl 對NFS守護進程進行控制

vm86 進入模擬8086模式

create_mole 創建可裝載的模塊項

delete_mole 刪除可裝載的模塊項

init_mole 初始化模塊

query_mole 查詢模塊信息

*get_kernel_syms 取得核心符號,已被query_mole代替

四、內存管理

brk 改變數據段空間的分配

sbrk 參見brk

mlock 內存頁面加鎖

munlock 內存頁面解鎖

mlockall 調用進程所有內存頁面加鎖

munlockall 調用進程所有內存頁面解鎖

mmap 映射虛擬內存頁

munmap 去除內存頁映射

mremap 重新映射虛擬內存地址

msync 將映射內存中的數據寫回磁碟

mprotect 設置內存映像保護

getpagesize 獲取頁面大小

sync 將內存緩沖區數據寫回硬碟

cacheflush 將指定緩沖區中的內容寫回磁碟

五、網路管理

getdomainname 取域名

setdomainname 設置域名

gethostid 獲取主機標識號

sethostid 設置主機標識號

gethostname 獲取本主機名稱

sethostname 設置主機名稱

六、socket控制

socketcall socket系統調用

socket 建立socket

bind 綁定socket到埠

connect 連接遠程主機

accept 響應socket連接請求

send 通過socket發送信息

sendto 發送UDP信息

sendmsg 參見send

recv 通過socket接收信息

recvfrom 接收UDP信息

recvmsg 參見recv

listen 監聽socket埠

select 對多路同步I/O進行輪詢

shutdown 關閉socket上的連接

getsockname 取得本地socket名字

getpeername 獲取通信對方的socket名字

getsockopt 取埠設置

setsockopt 設置埠參數

sendfile 在文件或埠間傳輸數據

socketpair 創建一對已聯接的無名socket

七、用戶管理

getuid 獲取用戶標識號

setuid 設置用戶標志號

getgid 獲取組標識號

setgid 設置組標志號

getegid 獲取有效組標識號

setegid 設置有效組標識號

geteuid 獲取有效用戶標識號

seteuid 設置有效用戶標識號

setregid 分別設置真實和有效的的組標識號

setreuid 分別設置真實和有效的用戶標識號

getresgid 分別獲取真實的,有效的和保存過的組標識號

setresgid 分別設置真實的,有效的和保存過的組標識號

getresuid 分別獲取真實的,有效的和保存過的用戶標識號

setresuid 分別設置真實的,有效的和保存過的用戶標識號

setfsgid 設置文件系統檢查時使用的組標識號

setfsuid 設置文件系統檢查時使用的用戶標識號

getgroups 獲取後補組標志清單

setgroups 設置後補組標志清單

八、進程間通信

ipc 進程間通信總控制調用

1、信號

sigaction 設置對指定信號的處理方法

sigprocmask 根據參數對信號集中的信號執行阻塞/解除阻塞等操作

sigpending 為指定的被阻塞信號設置隊列

sigsuspend 掛起進程等待特定信號

signal 參見signal

kill 向進程或進程組發信號

*sigblock 向被阻塞信號掩碼中添加信號,已被sigprocmask代替

*siggetmask 取得現有阻塞信號掩碼,已被sigprocmask代替

*sigsetmask 用給定信號掩碼替換現有阻塞信號掩碼,已被sigprocmask代替

*sigmask 將給定的信號轉化為掩碼,已被sigprocmask代替

*sigpause 作用同sigsuspend,已被sigsuspend代替

sigvec 為兼容BSD而設的信號處理函數,作用類似sigaction

ssetmask ANSI C的信號處理函數,作用類似sigaction

2、消息

msgctl 消息控制操作

msgget 獲取消息隊列

msgsnd 發消息

msgrcv 取消息

3、管道

pipe 創建管道

4、信號量

semctl 信號量控制

semget 獲取一組信號量

semop 信號量操作

5、共享內存

shmctl 控制共享內存

shmget 獲取共享內存

shmat 連接共享內存

shmdt 拆卸共享內存

❻ 如何對mmap區域的數據進行加鎖

如果內存映射文件是將文件全部讀取到內存中,那麼「內存映射文件」和你直接從文件讀取數據,全部裝入內存就沒有區別了,內存映射文件也就沒有存在的意義了。 內存映射文件的原理是通過數據訪問局部性這個原理來提高性能的。什麼叫數據訪問局部性呢?我們從統計學意義上分析,如果你讀取文件中某個地方的數據,那麼你接下來讀取的數據在之前讀取地址附近的概率,要比讀取很遠的地方的數據的概率要高。 那麼,如果操作系統得到請求,你要獲取某個數據,它在讀取這個數據的時候,順帶手將這一塊的數據都讀取到內存中。也許接下來很不幸,你讀取的數據不在操作系統預取的范圍內,但是這是少數情況。多數情況是,你接下來再讀的數據,內存中已經有了,此時操作系統無需再訪問磁碟,直接從內存中返回。 雖然這比一次性全部讀進內存,100%的數據都能訪問到要稍微遜色一些,但是我們用很經濟的代價(可能只要原數據10%的內存)得到了近乎完美的性能(和完全讀到內存相比性能可能相差10%)。 是不是這樣一來性能就提高了?內存映射文件的含義就是,操作系統透明處理了很多載入、更新、回寫緩存的操作,使得開發者看上去像是讀取文件,但是結果是更快實現了IO的存取。同時又避免數據過大不能一次性讀取到內存的問題。

❼ 如何實現 C/C++ 與 Python 的通信

引入Python可以帶來更好的可調式性。且如果重負載應用使用C/C++則基本沒有性能損失,並可以讓工程師把更多精力放在演算法優化獲得性能優勢上。

簡單講Python與C/C++的直接交互就是兩種方向:C/C++寫擴展模塊給Python調用;將Python嵌入C/C++。題主說的是後者。而更方便方式是前者。因為內嵌方式決定了你整個交互部分開發完成之前沒法做測試。而擴展模塊方式則可以先行用Python快速開發出大部分功能,有需要性能優化的部分逐步優化到C/C++。是更加漸進式的過程。
直接用最基礎的方法寫擴展模塊略有繁雜,適合對細節的控制。題主時間緊迫則可以考慮Cython,可以在較短時間里完成些任務。但更多高級功能的玩法則限制很多。
其他交互方式還有多種,性能就不是那麼高了。比如fork()子進程,用管道通信。開獨立進程走mmap()交互,甚至是本機或其他機器上走socket。
最後,C++做了很多底層抽象,使得其與其他編程語言的互調用方面麻煩的要死。比較典型的包括類繼承,運算符重載,引用,其他還有太多。這些特性使得其他語言調用C++時各種惡心。這不僅僅是對Python,而是對所有語言都是如此。不信試試在C程序里調用一個C++運算符重載過的方法。所以,如非必要,盡量別用C++。用C簡單方便的多,而任何用以支持大規模項目的架構用Python就是了。

❽ 哪位大神有python版的完整的bloom filter實現過程,感謝!

Python實現以及使用
代碼實現網上有很多,有時間可以研究一下
使用:我下載了github上的模塊,使用mmap速度更快。
通俗點兒來講:
1、該句引入模塊
from pybloomfilter import BloomFilter

2、Reference如下
常用的函數有:
class pybloomfilter.BloomFilter(capacity : int, error_rate : float, filename : string)
static BloomFilter.open(filename)
BloomFilter.add(item) → Boolean
BloomFilter.clear_all()
BloomFilter.(filename) → BloomFilter
BloomFilter.update(iterable)
BloomFilter.__len__(item) → Integer
BloomFilter.__in__(item) → Boolean

❾ 學嵌入式linux需要先學什麼

剛入門的時候,淘寶買一塊cortex m3開發板即可入手,通過項目,你需要了解:任務調度、進程間通信、內存管理、設備驅動、文件系統、TCP/IP協議棧、同步非同步、中斷、軟體架構插件化等等基本原理,這些對你後面轉Linux應用開發,安卓開發,後台開發大有好處。

到這一步,就看自己職業方向想往哪裡發展,如果是想深入IOT物聯網做端雲連接,那麼可以把幾種基本匯流排驅動,I2C、SPI、USART理解透,如果是想擁抱互聯網轉入應用開發,那麼可以把基礎組件,如協議棧、文件系統吃透,BAT面試不是很難,問的都是這些基礎。

順便說一下,學東西就要學對市場有用的,不要過於學習屠龍之術,炫技給個人帶來不了財富,公司需要的是能幹活的人。

不準備講過於偏硬體的知識如Cortex-M3的多種中斷模式,操作寄存器組,晶元降噪等內容,而是專注於操作系統基本知識和項目經驗,這些對於開發者後面接觸Linux系統大有脾益,這些軟體開發經驗也是去互聯網公司看重的能力。如有需要學習Linux命令請如下查找:

❿ 如何交叉編譯Python到ARM-Linux平台

編譯sqlite

先去 http://www.sqlite.org/download.html 下載最新的sqlite源代碼,我這里用的是3.5.6版本的。

我推薦使用amalgamation版本的源代碼,這個代碼只有幾個文件而已,編譯起來方便,而且據說 編譯器好的話,還可能編譯出更高效的代碼。 我下載的是

[plain]
view plain

http://www.sqlite.org/sqlite-amalgamation-3.5.6.tar.gz

先運行以下幾步:

[plain]
view plain

tar zxf sqlite-amalgamation-3.5.6.tar.gz
cd sqlite-3.5.6
./configure --host=arm-linux --prefix=/usr/local/arm/3.3.2 --enable-shared --disable-readline --disable-dynamic-extensions

以上是把sqlite解壓縮,然後做一些配置,這里,我希望sqlite到時候安裝到/usr/local/arm/3.3.2里,要生成動態鏈接庫,不要readline,不要sqlite的動態擴展。

然後編輯Makefile,把CFLAG和CXXFLAG中的-g去掉,我們不用debug sqlite。

接下來就可以編譯和安裝sqlite了:

[plain]
view plain

make
make install

這一步就完成了sqlite的編譯和安裝了。

編譯python

先去http://www.python.org/download/下載最新版本的python源代碼,我這里下載的是:

[plain]
view plain

http://www.python.org/ftp/python/2.5.1/Python-2.5.1.tar.bz2

先把python解壓縮:

[plain]
view plain

tar jxf Python-2.5.1.tar.bz2
cd Python-2.5.1

編譯pc版本的語法解析器

由於在編譯python的時候,需要先編譯一個叫pgen的程序出來,用於生成語法解析器,所以我們要先生成一個pc版本的pgen:

[plain]
view plain

mkdir build.pc
cd build.pc
../configure
make Parser/pgen

然後ls Parser一下,應該就能看到有pgen了。

修改configure

configure在檢測編譯器的printf是否支持%zd的時候,如果發現是在cross compile,就直接不幹活了。這還了得?

把這一部分的檢測代碼去掉。這段代碼起始於

[plain]
view plain

echo "$as_me:$LINENO: checking for %zd printf() format support" >&5
echo $ECHO_N "checking for %zd printf() format support... $ECHO_C" >&6
if test "$cross_compiling" = yes; then

結束於

[plain]
view plain

cat >>confdefs.h <<\_ACEOF
#define PY_FORMAT_SIZE_T "z"
_ACEOF

else
echo "$as_me: program exited with status $ac_status" >&5
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5

( exit $ac_status )
echo "$as_me:$LINENO: result: no" >&5
echo "${ECHO_T}no" >&6
fi
rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi

把這兩段以及中間的內容都刪除掉就可以了。

編譯arm版本的python

有了語法解析器,就可以開始編譯arm版本的python了。

[plain]
view plain

mkdir ../build.arm
cd ../build.arm
../configure --prefix=/home/leojay/test/arm-system-working/rootfs --disable-ipv6 --host=arm-linux --enable-shared

先創建一個用於編譯的目錄build.arm,再對python做一些配置,如安裝目錄,不要ipv6,使用arm-linux的編譯器,生成動態鏈接庫。

修改Makefile

之後就要對Makefile做一些修改,把

[plain]
view plain

OPT= -DNDEBUG -g -O3 -Wall -Wstrict-prototypes

一行中,去掉-g,我們不要debug python,-O3改為-O2,空間緊張O2就可以了。



[plain]
view plain

PGEN= Parser/pgen$(EXE)

一行的下面加上

[plain]
view plain

PGEN_HOST= ../build.pc/Parser/pgen$(EXE)

表明我們在HOST上運行的pgen

在要使用PGEN的地方改為PGEN_HOST:

[plain]
view plain

$(GRAMMAR_H) $(GRAMMAR_C): $(PGEN) $(GRAMMAR_INPUT)
-$(PGEN) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)

改為:

[plain]
view plain

$(GRAMMAR_H) $(GRAMMAR_C): $(PGEN) $(GRAMMAR_INPUT)
-$(PGEN_HOST) $(GRAMMAR_INPUT) $(GRAMMAR_H) $(GRAMMAR_C)

修改所有使用新生成的python的地方。

所有如 ./$(BUILDPYTHON) 的地方,都改為python

如:

[plain]
view plain

platform: $(BUILDPYTHON)
$(RUNSHARED) ./$(BUILDPYTHON) -E -c 'import sys ; from distutils.util import get_platform ; print get_platform()+"-"+sys.version[0:3]' >platform

改為

[plain]
view plain

platform: $(BUILDPYTHON)
$(RUNSHARED) python -E -c 'import sys ; from distutils.util import get_platform ; print get_platform()+"-"+sys.version[0:3]' >platform

這種地方比較多,大家小心修改。

修改setup.py

setup.py負責編譯python的各個擴展模塊。但是,由於python完全沒有考慮cross compile,所以要做一些修改。

PyBuildExt類:

函數的前兩行是把/usr/local加到搜索目錄中,我們的cross compiler一般不會直接安裝在 /usr/local裡面的,所以這兩行去掉:

[plain]
view plain

lib_dirs, inc_dirs的設定中,把中括弧里的那些都去掉。 以下所有模塊都不要:
這個函數在編譯了所有的extension後,會去load這些剛編譯好的extension, 但我們在i686的電腦上顯然不能load,所以要跳過這些操作。 在 build_ext.build_extension(self, ext)後面直接寫一個return,不做load。
for d in ['/usr/local/arm/3.3.2/include']
for d in inc_dirs + sqlite_inc_paths:
ssl, openssl, bdb, dbm, termios, nsl, ncurses, bz2, linuxaudiodev, ossaudiodev, tkinter
add_dir_to_list(self.compiler.library_dirs, '/usr/local/lib')
add_dir_to_list(self.compiler.include_dirs, '/usr/local/include')
build_extension函數:
detect_moles函數:
cmath, ctypes, _testcapi, pwd, grp, spwd, mmap, audioop, imageop, rgbimg, readline,

[plain]
view plain

由於python本身的問題,現在ctypes還不能在除i386以外的機器上運行,所以ctypes也去掉 編譯sqlite的地方:

[plain]
view plain

改為:

[plain]
view plain

因為我的sqlite3安裝在這里,如果這里不改的話,setup.py會在我的電腦上找sqlite

main函數:
setup函數調用的時候,把要安裝的scripts那一部分去掉

之後就可以make && make install了。

附上我修改後的 Makefile 和 setup.py 供大家參考

裁減python

python完全安裝後,實在是很大,所以,要把一些肯定用不上的庫去掉。 所以,再附上我的裁減腳本 cleanpy.sh

注意,由於我的python程序都運行在python -OO的參數下,所有的.py和.pyc都不需要, 只要有.pyo就可以了。所以,這個腳本會把所有的.py和.pyc都刪除掉。

大家可以根據自己的需要做調整。

閱讀全文

與pythonmmap模塊相關的資料

熱點內容
阿里雲伺服器終端在哪裡 瀏覽:144
app紙有什麼用 瀏覽:219
cuteftp命令 瀏覽:502
最開始的編程語言是什麼 瀏覽:757
at遠程命令 瀏覽:490
雲伺服器哪家好點 瀏覽:211
android系統源碼閱讀 瀏覽:925
dumpjava分析工具 瀏覽:678
怎麼下載cpu源碼 瀏覽:154
代碼加密怎麼取消 瀏覽:888
編譯原理代碼在哪裡運行 瀏覽:584
解密攝影pdf 瀏覽:72
演算法編程中級題目 瀏覽:250
c語言編譯器畢業設計 瀏覽:717
醫保卡申請app哪個好 瀏覽:945
阿里雲伺服器上傳源碼 瀏覽:602
營銷管理科特勒pdf 瀏覽:696
願望清單app哪個好 瀏覽:461
安卓外放聲音怎麼解決 瀏覽:196
脈脈app干什麼用的 瀏覽:362