Numpy: BUG : PyArray_BufferConverter๊ฐ€ ์•ˆ์ „ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2020๋…„ 01์›” 27์ผ  ยท  5์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: numpy/numpy

์ด ๊ธฐ๋Šฅ :

  1. PyObject_GetBuffer
  2. ๋ฐ์ดํ„ฐ ํฌ์ธํ„ฐ๋ฅผ ์ถ”์ถœํ•ฉ๋‹ˆ๋‹ค.
  3. PyBuffer_Release
  4. ํ˜ธ์ถœ์ž์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

PyBuffer_Release ๋Š” PyBufferProcs.bf_releasebuffer(PyObject *exporter, Py_buffer *view) PyBuffer_Release ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค. ๋ฌธ์„œ์— ๋”ฐ๋ฅด๋ฉด _ " view ์™€ (๊ณผ) ๊ด€๋ จ๋œ ๋ชจ๋“  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œ"_ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ view ๊ฐ€ exporter .

๋”ฐ๋ผ์„œ ์›์น™์ ์œผ๋กœ bf_getbuffer ์—์„œ ์ฆ‰์‹œ ๋ฒ„ํผ๋ฅผ ํ• ๋‹นํ•˜๊ณ  ๋งˆ์ง€๋ง‰ ์‚ฌ์šฉ์ด ๋ฆด๋ฆฌ์Šค ๋  ๋•Œ์ด๋ฅผ ์‚ญ์ œํ•˜๋Š” ์œ ํ˜•์€ numpy์—์„œ ์‚ฌ์šฉ ํ›„ ์ž์œ ๋ฅผ ์œ ๋ฐœํ•ฉ๋‹ˆ๋‹ค.

๋ฒ„ํผ ํ”„๋กœํ† ์ฝœ์˜ ๊ตฌํ˜„์ž๊ฐ€ ์‹ค์ œ๋กœ์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋Š” ์•Œ ์ˆ˜ ์—†์ง€๋งŒ ๋‚ด๊ฐ€ ์ฝ๋Š” ๊ฒƒ์€ ํ—ˆ์šฉ๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

00 - Bug

๋ชจ๋“  5 ๋Œ“๊ธ€

์ด๊ฑด ์ด์ƒํ•ด. ๋ฒ„ํผ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋ฒ„ํผ ๊ตฌ์กฐ์ฒด ํ•„๋“œ (์˜ˆ : ์ŠคํŠธ๋ผ์ด๋“œ ๋“ฑ)๊ฐ€ PyBuffer_Release ์— ์˜ํ•ด ํ•ด์ œ๋˜๋Š” ๋™์•ˆ ๊ฐ€๋ฆฌํ‚ค๋Š” ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์›๋ž˜ ๊ฐœ์ฒด๊ฐ€ ์†Œ์œ ํ•ด์•ผํ•œ๋‹ค๊ณ  ์ง€์ •ํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋งค์šฐ ์„ฑ๊ฐ€์‹  _dealloc_cached_buffer_info )๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์‹ญ์‹œ์˜ค. ์ด๊ฒŒ ์˜๋„์ด๊ณ  ์‚ฌ์‹ค์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š”๋ฐ ...

์ด์ œ์ด ํ•จ์ˆ˜๋Š” ๋ฒ„ํผ๊ฐ€ ์•„๋‹Œ PyArray_Chunk ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ ์œ„์—์„œ ๋งํ•œ๋Œ€๋กœ ์„ค๋ช…ํ•˜๋ฉด ์‹ค์ œ๋กœ๋Š” ์™„์ „ํžˆ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

๊ท€ํ•˜์˜ ํ•ด์„์€ ๋” ํ•ฉ๋ฆฌ์ ์œผ๋กœ ๋“ค๋ฆฝ๋‹ˆ๋‹ค-์•„๋งˆ๋„ python / cpython์— ๋Œ€ํ•œ ํ’€ ์š”์ฒญ์€ ๋‚ด๊ฐ€ ์œ„์—์„œ ์„ค๋ช…ํ•œ ๊ฒƒ์„ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๋„๋ก ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋ฌธ์„œ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๊ฒƒ์ด ํ˜„๋ช… ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์—ด๋ฆฌ๋ ค๊ณ ํ–ˆ์ง€๋งŒ ๋จผ์ € ์ ์‹ฌ์„ ๋จน์—ˆ์Šต๋‹ˆ๋‹ค. https://bugs.python.org/issue39471 ์‹ค์ œ๋กœ ํ…์ŠคํŠธ ๋ณ€๊ฒฝ์„ ์ œ์•ˆํ•˜๋Š” ๊ฒƒ์„ ๊ฒ€ํ†  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ํ•ด์„์— ๋™์˜ ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋ฒ„ํผ ํ”„๋กœํ† ์ฝœ ๊ตฌํ˜„์—์„œ ๋งค์šฐ ์ถ”ํ•˜๊ณ  ๋งค์šฐ ๋Š๋ฆฐ ์ฝ”๋“œ๋ฅผ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค (ํ˜„์žฌ ์Šค์นผ๋ผ ์ˆ˜ํ•™ ์†๋„๊ฐ€ 20 % ์ด์ƒ ๋Š๋ ค์ง). (ํŽธ์ง‘ :ํ•˜์ง€๋งŒ ํŒŒ์ด์ฌ์ด ArgParse ์ฝ”๋“œ๋ฅผ ์ˆ˜์ • ํ•œ ํ›„์— ๋งŒ โ€‹โ€‹๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค. :()

๊ทธ๊ฒƒ์€ ์•ฝ๊ฐ„์˜ ๋ช…ํ™•์„ฑ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค-๋‚˜๋Š” ํŒŒ์ด์ฌ์ด ์ €์™€ ๊ฐ™์€ bf_releasebuffer ์™€ ๊ฐ™์€ ์ฝ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ซ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

์  ์žฅ, ๋‚˜๋Š” (PEP์—์„œ) ์ „์— ๊ทธ๊ฒƒ์„ ๋ฎ์–ด ์ผ๋‹ค.

๋‚ด๋ณด๋‚ด๊ธฐ๋Š” struct bufferinfo๋ฅผ ํ†ตํ•ด ๊ณต์œ  ํ•  ์ˆ˜์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ, ์ŠคํŠธ๋ผ์ด๋“œ, ๋ชจ์–‘, ํ•˜์œ„ ์˜คํ”„์…‹ ๋˜๋Š” ํ˜•์‹ ๋ณ€์ˆ˜๋ฅผ ๋‹ค์‹œ ํ• ๋‹น ํ•  ์ˆ˜์žˆ๋Š” ๊ฒฝ์šฐ bf_releasebuffer ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋ฒ„ํผ์— ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ ์ฒญํฌ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์œ ํšจํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์ฝ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ : array (python one)์˜ ๊ตฌํ˜„์„ ์‚ดํŽด๋ณด๋ฉด, ๋ฒ„ํผ๊ฐ€ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ ํฌ๊ธฐ ์กฐ์ •์„ ๋น„ํ™œ์„ฑํ™” ํ•˜๋Š” ๋ฐ

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰