當前位置:首頁 » 編程語言 » python引擎

python引擎

發布時間: 2022-06-12 19:23:52

『壹』 用python製作一個搜索引擎

可能幫不上忙。但別的語言有現成的。用java 的 solr做搜索,索引,分詞。只需要配置xml,不用寫代碼。然後加上前端頁面搜索就完成了。用python的scrapy可以做爬蟲。你的需求我感覺簡單做,都不需要索引,直接查資料庫。模糊查詢還有一個java的nutch,幾乎不用寫代碼,直接爬蟲+索引+界面 一套都實現好了,什麼高亮,快照都有,直接用。不知道你能出多少錢?

『貳』 python有什麼做游戲引擎的包嗎

python的pygame包就可以用了做游戲引擎

『叄』 除了Pygame外,還有哪些適合Python的游戲引擎

2d 用 pygame
3d 用 panda3d
cocos2d,這個一開始就是python的,現在iphone的版本造就了很多游戲

『肆』 在Python環境下比較好的工作流引擎是什麼

CSDN:FixFlow 和類似的軟體如 Activiti jBPM 等相比起來,它們之間有哪些區別呢?

FFDT:FixFlow 更加符合中國國情,支持復雜任務流轉,如轉發、退回、自由跳轉、會簽等處理,可以大大減少二次開發工作量。它還提供更加友好的設計器界面,可視化的連接器,還有中文的社區支持和有開發人員參與的技術交流群。

由於開源時間不長,FixFlow 的文檔沒有其他產品那麼齊全,網上的相關技術文章比較少,現在還都是依靠團隊成員在寫,社區用戶量也相對較少,但是增長非常快。

CSDN:工作流引擎是一門橫向的科學,應用非常廣泛。那麼,請介紹一下FixFlow 的產品都遍布在哪些應用領域!

FFDT:我們耳熟能詳的不外乎OA、綜合辦公管理,ERP,更細一些的包括:報銷、請銷假、員工入職離職等,然而從我們多年實施的項目經驗來看,各行各業都需要工作流,其原因是由於行業的工作趨於標准化,而標准化的工作需要通過符合企業自身環境的步驟來執行。每個企業的環境不同,操作方式也差別迥異,不可能用唯一的行業標准來規范企業運作過程中的所有步驟。所以在這樣的一種現狀下,工作流引擎的專業能力與靈活性的價值就體現出來了。

『伍』 畢業設計中怎樣用python寫一個搜索引擎的分

1、 網路連接需要持續連接(persistent connection),DNS解析的瓶頸(先查本地DNS緩存

實現方法:基於python httplib(對http1.1完成對持續連接的支持(python的httplib完全支持http1.1),如果不是http1.1那麼可以使用urlopen對其進行一次連接)並對其socket對象進行控制,關鍵是加入對讀取DNS本地緩存(在我的機制下這個根本就不是主要問題可以暫時忽略),以及有settimeout(Igloo)(搞定,就用setdefaulttimeout())的支持(或者利用自己的DNS伺服器,進行優化處理),以及對sock對象的settimeout進行設置,防止長時間的等待一個有可能連接不上的web伺服器.(要測試一下連接模塊和DNS解析模塊在訪問不存在url在默認情況下的時間消耗)對站點的ip解析出來後就直接用ip進行連接而避免了重復調用DNS解析.例子:socket.gethostbyname("www.163.com")

網路連接下載模塊非常重要,需要精心反復測試,因為有可能碰到一些不規范的web伺服器,如果沒有加以考慮會使整個線程崩潰。

2、 多線程:機器任務的分配及站點任務的分配。

實現方法:(在某台機器上實現,在對本機內存cpu的消耗情況判斷後對機器任務進行分配;在對和站點的連接情況進行判斷後對站點任務進行分配)
機器任務的分配:對於機器負擔的情況調整在一個機器開的線程的個數。(在關閉線程時注意要先讓線程完成當前運行任務)
站點任務的分配:就是某個機器對一個站點開的線程的個數的分配。(同樣是要注意關閉線程時先讓其完成當前任務)

3、 對web文件樹遍歷過程更好的控制,對web文件樹在廣度優先遍歷時層次的判斷。(整個網路是一個圖,而某個站點的模型更接近於一棵樹)

實現方法:在每個地址進入隊列時加一個層次號,那麼要遍歷第n層的話那麼遍歷到第一個n+1就停止讀取。

4、 利用robotparser解析robots.txt

5、 單個機器spider的作用:

a) 同2多線程3文件樹的遍歷

b) 將獲取的外部url發回中央控制器,並從中央控制器取回新的外部url。

6、 中央控制器的作用:

a) 觀察各機器的狀態包括:cpu、內存、線程、站點、網路流量
b) 觀察對外整體網路流量和連接狀況,可以根據網路狀況來調節timeout。

c) 接受各個機器發送過來的外部url並對每個url的重復數字計數。然後分配到各個機器。(分配時要用爬行策略控制器對外部url進行排序來分配,Igloo利用Page Rank,我們可以使用最簡單的重復越多重要系數就越高來進行排序)

d) 分布式URL分配演算法:Igloo1.2的二級哈希映射演算法(集中式分配演算法那個中央控制器容易成為系統瓶頸)復習哈希演算法,還有就是對url是否訪問過的判斷(Igloo使用的是URL Trie滯後合並策略)。可以使用Berkeley DB作為URL Trie的替代品。兩種實現方式的比較:

i. 現在的想法:(面向站點,信息顆粒大)外部鏈接只是保存主機名比如:www.163.com, 站內訪問用解析好的ip地址維持連接,用相對鏈接來得到各個頁面,這樣就要維護一個外部鏈接列表,幾個站點的鏈接列表。優點:節省內存,對某個站點的信息獲取全面,對站點的出現頻率統計,排序,重要站點先取。 缺點:對鏈接的獲取的全面性得不到保證,而且不能獲取更多的重要頁面,每個站點的重要頁面也不會很多。
ii. 老方案:(面向頁面,信息顆粒小)所有連接一視同仁。缺點:浪費資源,對單一站點的獲取不一定全面。優點:可以得到全面的鏈接圖,可以使用Page Rank對列表進行排序,頁面更重要就在最前面。

7、 解析html(超級鏈接的提取)搞定(用python的sgmllib)缺點:速度太慢(可能會造成瓶頸,要好好包裝好,以後有機會換掉它)

『陸』 用Python編程需要哪些軟體

一、終端:Upterm:簡略好用,是一個全渠道終端,能夠說是終端里的IDE,有著強壯的自動補全功能。
二、互動式解說器:PtPython:支持語法高亮、提示乃至是Vim和emacs的鍵入模式。
三、包管理:Anaconda:能幫你裝置好許多麻煩的軟體,包括:Python環境、pip包管理東西、常用的庫、配置好環境路徑等。用Python高數據方面的工作,就裝置Anaconda,它乃至開發了一套JIT的解說器Numba。
四、腳本引擎:QPython:QPython是一個能夠在安卓體繫上運行Python腳本引擎,整合了Python解說器、Console、編輯器和SL4A庫,在安卓設備上你照樣可以玩轉Python。
五、編輯器:Sublime3:配合裝置Anaconda或Codelntel插件,就能夠讓Sublime具有近乎IDE的體會。
六、IPython:一個根據Python shell的互動式解說器。它的自動補全非常好用,乃至用了它之後,很多程序員小夥伴們就不想再用自帶的Python shell啦。

『柒』 Python 實現一個大數據搜索引擎需要多少行代碼

十幾萬行吧

『捌』 Python 有那麼神嗎

很多對Python不熟悉的人,認為Python在最近這些年的興起是運氣而已。本文幫助大家回顧一下過去十幾年Python的3次增長和對應的歷史背景。

Python設計之處的特點,包括易學易用,以及作為膠水語言。易學易用是個難以量化的東西,但至少我接觸的絕大多數朋友都認同Python在學習和使用上是比大部分語言簡單的。有些人不認同Python通常也不是認為Python相對其他語言難學,而是認為Python的運行速度慢,或者動態類型語言的通病。至於膠水語言就比較窄了,面向作為膠水而設計的語言是很少的,印象里只有Lua算得上一個。另一個Python相較其他語言的優勢是字元串處理。

以下介紹Python獲得發展的3次機遇期。

2006年的搜索/NLP:2006年前後正好是搜索引擎公司發展的爆發期。那一年Google中國李開復搞了關門弟子計劃,網路也做了諸多廣告,比如網路更懂中文系列。在那個時代搜索引擎就是IT行業的高科技。之後不久,阿里巴巴也搞了個ASC(阿里巴巴搜索技術研究中心),後來多次追潮流更名,一直作為阿里巴巴內部的前沿研發部門。

而Python用作搜索引擎和NLP是很有歷史的。早期Google在90年代開發搜索引擎爬蟲就是使用Python實現的。而即便是現在,開發爬蟲,Python也基本上就是第一選擇。很多人學習Python的入門程序也是爬蟲。而Python適合開發爬蟲的關鍵在於Python的字元串處理是很方便的。

也就是從2006年末開始,國內的python-cn郵件列表湧入了大量的新人,並以爬蟲為例開始深入學習Python。

2010年的WEB創業潮:2010年開始,國內外出現了新一輪的創業潮,大家開發的是各種各樣的網站。此時的WEB開發上,Python已經逐步成為主流WEB伺服器開發選項中的一種。相對於同時代的Java和PHP等,有著開發效率上的優勢。

正因為早期創業公司需要迅速的迭代和試錯,使得這個時代的Python成為了一個不錯的選項。進而讓更多工程師開始學習起來Python。

也就是從這個時期開始,才逐漸有較多的公司會公開招聘Python工程師。在此前招聘Python工程師的廣告是非常非常少見的。

2014年的Deep Learning:從2014年開始火起來的深度學習上,Python的優勢是近乎絕對的。深度學習的主流開發語言只有C++和Python兩種了,其他語言可以認為根本就沒能在這里分到什麼像樣的空間。所有主流的Deep Learning框架,也是官方直接提供了C++和Python兩種介面。而由於C++開發的難度,當前確實有不少從業工程師是直接用Python搞定深度學習的相關步驟。

這次Python的增長期被更多不了解Python的人認為是Python的狗屎運。但其背後的邏輯反倒是非常堅固的。原因就是Python是個很好的膠水。最初的起點是numpy庫。

numpy是封裝了BLAS的科學計算庫。BLAS是對CPU向量指令集高度優化的數學運算庫。通過BLAS進行科學計算可以得到頂級的計算性能,這個計算性能比未經向量指令集優化的C程序還能快上數倍。而numpy的另一個重要特點就是,把buffer做了封裝,使得buffer的內容是無需Python處理的,而是實際交給特定的軟體庫來處理,numpy只是負責維護該buffer的生命周期,形狀等元數據。這就使得numpy的計算性能不會受到Python的影響,但同時卻可以利用Python的易學易用來管理buffer的生命周期。

numpy對buffer的管理帶來的易用性優勢在後來得到了很大的發展。如以下幾點:

  • OpenCV:在opencv-python中就是使用了numpy.array來管理圖像數據,卻沒有像C++介面一樣使用Mat。同樣的頂級性能。

  • PyCuda/PyOpenCL:也是利用了numpy.array來透明傳遞數據給GPU做高性能計算。尤其是集成了JIT,使得可以用字元串的方式傳遞kernel function,不再像C++一樣要獨立編譯一遍。

  • Caffe/TensorFlow:同樣利用了numpy.array,並利用了PyCuda/PyOpenCL的集成。

  • 所以這樣一路發現下來,由Python是個好膠水,就真的把若干很好用的庫全流程的粘在了一起。在流程集成上都是頂級的性能,而沒有Python的性能損耗,同時帶來了非常好的易用性。

    相比其他語言,對這些C/C++庫的玩法都是先封裝一層對象,包準封裝的前後對不上。而且因為大部分語言並不是面向膠水設計,開發C介面都很困難。自然與這些高性能計算庫的結合困難重重。累計起來就與Python產生了差距。

    題主所提到的R語言,是一種領域相關的語言,是做統計領域的,類似的還有做科學計算的Matlab。如果程序的輸出只是一份報告,甚至一份統計圖,問題是不大的。但想要成為產品,與其他系統集成則成了難題。一般的伺服器部署產品,是不會選擇在工程上這么不專業的語言。所以,實際應用時,還是要有工程師負責將演算法提取出來,移植到產品級的語言和平台上。舉個例子,R雖然可以正常的訪問Mysql資料庫之類的。但產品級系統中,涉及到memcache、kafka、etcd等,可就沒有R語言的介面了。所以這些領域相關語言,寫一些自己電腦上跑的小程序還可以,進入產品是沒什麼希望了。

    再者就是因為通用性一直難以跨越出自己的領域,所以這類語言的生命周期一般都不太長,失去自己領域的強支撐後會很快消亡。所以建議題主還是花一些精力去看看業界通用的一些語言。

『玖』 除了Pygame外,還有哪些適合Python的游戲引擎

如果游戲的中心是一個邏輯,比如戰斗類型的,牽扯到拓撲人物,以及人物數據,環境數據。
然後就是其中的演算法
游戲還得有個故事。當然主要看你的目的。
其次還有些配音。文字。之類的。
理論上pygame不能做rpg這種貨色,如果對畫質要求高的 話。
黑白棋五子棋。這也是游戲啊。主要是邏輯。和規則。

『拾』 如何用Python爬取搜索引擎的結果

我選取的是爬取網路知道的html 作為我的搜索源數據,目前先打算做網頁標題的搜索,選用了 Python 的 scrapy 庫來對網頁進行爬取,爬取網頁的標題,url,以及html,用sqlist3來對爬取的數據源進行管理。
爬取的過程是一個深度優先的過程,設定四個起始 url ,然後維護一個資料庫,資料庫中有兩個表,一個 infoLib,其中存儲了爬取的主要信息:標題,url ,html;另一個表為urlLib,存儲已經爬取的url,是一個輔助表,在我們爬取每個網頁前,需要先判斷該網頁是否已爬過(是否存在urlLib中)。在數據存儲的過程中,使用了SQL的少量語法,由於我之前學過 MySQL ,這塊處理起來比較駕輕就熟。
深度優先的網頁爬取方案是:給定初始 url,爬取這個網頁中所有 url,繼續對網頁中的 url 遞歸爬取。代碼逐段解析在下面,方便自己以後回顧。
1.建一個 scrapy 工程:
關於建工程,可以參看這個scrapy入門教程,通過運行:

[python] view plain
scrapy startproject ***

在當前目錄下建一個scrapy 的項目,然後在 spiders 的子目錄下建立一個 .py文件,該文件即是爬蟲的主要文件,注意:其中該文件的名字不能與該工程的名字相同,否則,之後調用跑這個爬蟲的時候將會出現錯誤,見ImportError。
2.具體寫.py文件:

[python] view plain
import scrapy
from scrapy import Request
import sqlite3

class rsSpider(scrapy.spiders.Spider): #該類繼承自 scrapy 中的 spider
name = "" #將該爬蟲命名為 「知道」,在執行爬蟲時對應指令將為: scrapy crawl
#download_delay = 1 #只是用於控制爬蟲速度的,1s/次,可以用來對付反爬蟲
allowed_domains = ["..com"] #允許爬取的作用域
url_first = 'http://..com/question/' #用於之後解析域名用的短字元串
start_urls = ["http://..com/question/647795152324593805.html", #python
"http://..com/question/23976256.html", #database
"http://..com/question/336615223.html", #C++
"http://..com/question/251232779.html", #operator system
"http://..com/question/137965104.html" #Unix programing
] #定義初始的 url ,有五類知道起始網頁

#add database
connDataBase = sqlite3.connect(".db") #連接到資料庫「.db」
cDataBase = connDataBase.cursor() #設置定位指針
cDataBase.execute('''''CREATE TABLE IF NOT EXISTS infoLib
(id INTEGER PRIMARY KEY AUTOINCREMENT,name text,url text,html text)''')
#通過定位指針操作資料庫,若.db中 infoLib表不存在,則建立該表,其中主鍵是自增的 id(用於引擎的docId),下一列是文章的標題,然後是url,最後是html

#url dataBase
cDataBase.execute('''''CREATE TABLE IF NOT EXISTS urlLib
(url text PRIMARY KEY)''')
#通過定位指針操作資料庫,若.db中urlLib表不存在,則建立該表,其中只存了 url,保存已經爬過的url,之所以再建一個表,是猜測表的主鍵應該使用哈希表存儲的,查詢速度較快,此處其實也可以用一個外鍵將兩個表關聯起來

2. .py文件中的parse函數:

.py文件中的parse函數將具體處理url返回的 response,進行解析,具體代碼中說明:

[python] view plain
def parse(self,response):
pageName = response.xpath('//title/text()').extract()[0] #解析爬取網頁中的名稱
pageUrl = response.xpath("//head/link").re('href="(.*?)"')[0] #解析爬取網頁的 url,並不是直接使用函數獲取,那樣會夾雜亂碼
pageHtml = response.xpath("//html").extract()[0] #獲取網頁html

# judge whether pageUrl in cUrl
if pageUrl in self.start_urls:
#若當前url 是 start_url 中以一員。進行該判斷的原因是,我們對重復的 start_url 中的網址將仍然進行爬取,而對非 start_url 中的曾經爬過的網頁將不再爬取
self.cDataBase.execute('SELECT * FROM urlLib WHERE url = (?)',(pageUrl,))
lines = self.cDataBase.fetchall()
if len(lines): #若當前Url已經爬過
pass #則不再在資料庫中添加信息,只是由其為跟繼續往下爬
else: #否則,將信息爬入資料庫
self.cDataBase.execute('INSERT INTO urlLib (url) VALUES (?)',(pageUrl,))
self.cDataBase.execute("INSERT INTO infoLib (name,url,html) VALUES (?,?,?)",(pageName,pageUrl,pageHtml))
else: #此時進入的非 url 網頁一定是沒有爬取過的(因為深入start_url之後的網頁都會先進行判斷,在爬取,在下面的for循環中判斷)
self.cDataBase.execute('INSERT INTO urlLib (url) VALUES (?)',(pageUrl,))
self.cDataBase.execute("INSERT INTO infoLib (name,url,html) VALUES (?,?,?)",(pageName,pageUrl,pageHtml))

self.connDataBase.commit() #保存資料庫的更新

print "-----------------------------------------------" #輸出提示信息,沒啥用

for sel in response.xpath('//ul/li/a').re('href="(/question/.*?.html)'): #抓出所有該網頁的延伸網頁,進行判斷並對未爬過的網頁進行爬取
sel = "http://..com" + sel #解析出延伸網頁的url
self.cDataBase.execute('SELECT * FROM urlLib WHERE url = (?)',(sel,)) #判斷該網頁是否已在資料庫中
lines = self.cDataBase.fetchall()
if len(lines) == 0: #若不在,則對其繼續進行爬取
yield Request(url = sel, callback=self.parse)

熱點內容
php給文本框賦值 發布:2024-05-06 03:21:24 瀏覽:25
androidjsonkey 發布:2024-05-06 03:07:31 瀏覽:731
python主線程子線程 發布:2024-05-06 03:07:20 瀏覽:763
android系統截屏 發布:2024-05-06 02:57:51 瀏覽:776
android居左 發布:2024-05-06 02:40:26 瀏覽:45
網頁設置的密碼如何刪除 發布:2024-05-06 02:20:30 瀏覽:926
如何查看snmp配置信息 發布:2024-05-06 02:19:48 瀏覽:489
預科編程 發布:2024-05-06 02:19:42 瀏覽:140
壓縮比英文 發布:2024-05-06 01:56:35 瀏覽:173
數字php 發布:2024-05-06 01:53:10 瀏覽:743