ก่อนที่จะมองหาเครื่องมือ "กล่องดำ" ที่สามารถใช้ในการดำเนินการในฟังก์ชั่นหลาม "ทั่วไป" ฉันขอแนะนำให้วิเคราะห์ว่าmy_function()
สามารถจัดเรียงด้วยมือได้อย่างไร
ก่อนอื่นให้เปรียบเทียบเวลาดำเนินการของโอเวอร์คmy_function(v)
ล็อกfor
แบบหลามหลาม: [C] for
ลูปไพ ธ อนค่อนข้างช้าดังนั้นเวลาที่ใช้ไปmy_function()
อาจน้อยมาก
>>> timeit.timeit('pass', number=1000000)
0.01692986488342285
>>> timeit.timeit('for i in range(10): pass', number=1000000)
0.47521495819091797
>>> timeit.timeit('for i in xrange(10): pass', number=1000000)
0.42337894439697266
ตรวจสอบครั้งที่สองว่ามีการใช้เว็กเตอร์อย่างง่ายmy_function(v)
ซึ่งไม่จำเป็นต้องใช้ลูปหรือไม่:F[:] = my_vector_function(X)
(จุดแรกที่สองเหล่านี้ค่อนข้างน่ารำคาญยกโทษให้ฉันถ้าฉันพูดถึงพวกเขาที่นี่เพียงเพื่อความสมบูรณ์)
ที่สามและจุดสำคัญที่สุดอย่างน้อยสำหรับการใช้งาน CPython คือการตรวจสอบว่าmy_function
ใช้เวลาส่วนใหญ่ของมันเวลาที่อยู่ภายในหรือนอกล็อคล่ามทั่วโลกหรือGIL หากใช้เวลานอก GIL ควรใช้threading
โมดูลไลบรารีมาตรฐาน ( นี่คือตัวอย่าง) BTW ใคร ๆ ก็คิดว่าการเขียนmy_function()
เป็นส่วนเสริม C เพื่อปล่อย GIL
ในที่สุดหากmy_function()
ไม่ปล่อย GIL เราสามารถใช้multiprocessing
โมดูลได้
อ้างอิง: เอกสารหลามในการดำเนินการพร้อมกันและnumpy / SciPy บทนำในการประมวลผลแบบขนาน