আর্কজিআইএস জিওপ্রসেসিং সরঞ্জামগুলি ব্যবহার করে পাইথন স্ক্রিপ্টগুলি (.exe থেকে) সংকলন করছেন?


12

আমি বেশ কয়েক মাস ধরে পাইথনের সাথে কোডিং করছি এবং প্রাথমিকভাবে জিওপ্রসেসিংয়ের জন্য কিছু জটিল স্ক্রিপ্ট তৈরি করেছি। বলা হচ্ছে, এসকিউএল / ভিবিএ / ভিবিএস স্ক্রিপ্ট ব্যাকগ্রাউন্ড থেকে আসার কারণে আমি এখনও অনেক কিছু শিখছি।

আমি জানি যে সংকলিত কোডটি সাধারণত ভাষার চেয়ে কোনও দ্রুত অনুবাদ হয় যে কোনও ভাষা অনুবাদক দ্বারা প্রসেস করা উচিত, তাই আমি বড় ডেটা নিয়ে কাজ করার জন্য একটি জিওপ্রসেসিং পাইথন স্ক্রিপ্ট একটি .EXE ফাইলে সংকলনের সম্ভাবনায় আগ্রহী।

এটা কি সম্ভব? যদি তা হয় তবে আর্কজিস্ক্রিপ্টিং বা আরকিপি মডিউলগুলি আমদানি করে পাইথন (.py) স্ক্রিপ্টটি সংকলনের সেরা উপায় কী?

আমি যা করতে চাই তা খুঁজতে কয়েক মিনিট সময় ব্যয় করেছি এবং অনুসন্ধানটি এই নিবন্ধটি অন্যদের মধ্যে ফিরিয়ে দিয়েছে: http://www.ehow.com/how_2091641_compile-python-code.html

সংকলকটি কাজ করেছে বলে মনে হয়েছে, তবে ফলাফলের .EXE ফাইলটি সম্পাদন করার পরে, এটি কিছু ফাইল অনুপলব্ধ ছিল বলে একটি ক্রিপ্টিক ত্রুটি দিয়েছে।

পাইথন স্ক্রিপ্টটি কমান্ড লাইন থেকে যুক্তিসঙ্গতভাবে ভাল বলে মনে হচ্ছে, তবে আমি ভাবছি যে আমি .py ফাইলটি সংকলন করতে সক্ষম হলে কিছুটা উন্নতি দেখতে পেলাম। আবার, আমি এমন কয়েকটি বড় ডেটাসেটের সাথে কাজ করছি যা প্রক্রিয়া করতে +20 ঘন্টা সময় নেয় (ইনপুট জলের-মানের নমুনা সাইটগুলি থেকে জলাশয়গুলি বর্ণন করে)। উন্নতির পথে আমি যা কিছু পেতে পারি তা নিয়ে যাব।

স্ক্রিপ্টটি আর্কিগ্ল্যাজে নতুন টুলবক্সে স্ক্রিপ্ট সরঞ্জাম হিসাবে স্ক্রিপ্ট সেটআপ করা বনাম সাইটগুলির পরীক্ষার সেট ব্যবহার করে কমান্ড লাইন থেকে আর্কজিআইএসের বাইরে 10% দ্রুত দৌড়েছিল। আমি কমান্ড লাইন থেকে স্ক্রিপ্টটি চালাচ্ছি w / o একটি উত্সর্গীকৃত মেশিনে খোলার আরকিজিআইএস এর কোনও উদাহরণ।

তো, পাইথন স্ক্রিপ্টগুলি কি আরকিগিসিপিটিং মডিউল এবং সেই কলটি আর্কটুলবক্স সরঞ্জামগুলি আমদানি করে সংকলন করা সম্ভব?

সম্পাদনা

ইনপুট জন্য ধন্যবাদ, এটি আমার জন্য সহায়ক। স্ক্রিপ্টটি মূলত বেশিরভাগ আর্কজিআইএস সরঞ্জামকে সমন্বিত করার এবং পছন্দসই বিন্যাস / অবস্থানগুলিতে / উপযুক্ত বৈশিষ্ট্যের সাথে আউটপুট দেওয়ার একটি উপায়। আমি ইতিমধ্যে কিছু ফ্যাট ছাঁটাই করেছি বলে আমি মনে করি কিছু অন্তর্বর্তী রাস্টার ফাইলগুলির জন্য স্ক্র্যাচ ব্যক্তিগত জিওডাটাবেস পরিবর্তে একটি স্ক্র্যাচ ফোল্ডারে লিখে লিখে যাতে তারা ইএসআরআই গ্রিড ফর্ম্যাট বনাম আইএমজি ফর্ম্যাটে সংরক্ষণ করতে পারে। আমি প্রোফাইলার পরামর্শগুলি যাচাই করব।

আমার অফিসে এমন কিছু প্রশ্ন রয়েছে যে পাইথন বলেছে যে "সংকলিত কোডটি একজন অনুবাদকের মাধ্যমে চলমান কোডের চেয়ে অনেক বেশি দ্রুত" মূলত, একটি সংকলিত ভিজ্যুয়াল বেসিক প্রোগ্রাম বা ভিবি.এনইটি প্রোগ্রামের তুলনায়, তবে এটি একটি ভাল বিষয় সরঞ্জামগুলি যে কোনও উপায়ে সময় নিতে চলেছে। এবং, এটি বর্তমান সময়ের কম্পিউটিং মেশিনগুলির সাথে দেখে মনে হচ্ছে যে ব্যাখ্যা করা কোডটি অতিরিক্ত মাইল যাওয়ার ওয়্যারেন্ট করতে সংকলিত কোডের চেয়ে অনেক ধীর হতে পারে না।

সম্পাদনা - রাস্টার ফর্ম্যাটগুলি সহ প্রোগ্রামটির অপ্টিমাইজেশনের আপডেট।

এই পাইথন প্রোগ্রামটির আমার "অপ্টিমাইজেশন "টি অনুসরণ করতে চেয়েছিলাম এবং আমি ব্যক্তিগত জিওডাটাবেস পরিবর্তে জিআরআইডি ফর্ম্যাটে অন্তর্বর্তী রাস্টারগুলি লিখে 2 ঘন্টা প্রসেসিংয়ের সময় শেভ করতে সক্ষম হয়েছি। শুধু তাই নয়, ডেটা আকারের ডিস্কের জায়গার ব্যবহারের ক্ষেত্রে স্বাক্ষর হ্রাস ছিল। আসল রানটি আমি সমস্ত রেস্টারদের লিখেছিলাম (এবং সেগুলি কেবলমাত্র রেস্টারগুলিতে রূপান্তরিত পয়েন্ট বৈশিষ্ট্যগুলি ছিল, এবং তারপরে ওয়াটারশেড রাস্টারস) ফলে কেবল এই ফাইলগুলির জন্য 37.1 গিগাবাইট ডেটা হয়েছিল। জিআরআইডি ফর্ম্যাটে কোনও ফোল্ডারে পরবর্তী দুটি ডেটা আউটপুট লেখার সময় reduced reduced67 এমবি ডেটা হ্রাস করা হয়েছিল।

আমি জানতে আগ্রহী হই যে কোনও ফাইল জিডিবি কীভাবে এই ডেটাগুলি পরিচালনা করবে যদিও মূলত তথ্যের আকারের ক্ষেত্রে। তবে, আমার প্রসেসিংয়ের সময়টি 9.5 ঘন্টা থেকে কমিয়ে 7.5 ঘন্টা পর্যন্ত কেটে ফেলা অবশ্যই জিআরআইডি ফর্ম্যাটে জিওডাটাবেসগুলির বাইরের রাস্টারদের সাথে ডিল করার পক্ষে প্রয়োজন।


এই সকালে আরকিজিআইএস সার্ভার ব্লগটি খুব সময়োচিত। স্টার্লিং @ esri outlining কেন এবং কখন একটি ভাল পেশা আছে [1] [1] [এখানে।]: Blogs.esri.com/Dev/blogs/arcgisserver/archive/2011/04/12/...
ব্র্যাড Nesom

উত্তর:


15

প্রথম প্রশ্ন: পাইথনে আপনি এর কতটা করছেন? আপনি কি কেবল জিওপ্রসেসিং সরঞ্জামগুলিতে কল করছেন বা আপনি পাইথনে উল্লেখযোগ্য পরিমাণে সংখ্যা বিশ্লেষণ করছেন? যদি আগেরটি হয়, তবে সম্ভবত বাধাগুলি সরঞ্জামগুলিতে বাস করে এবং আপনার স্ক্রিপ্টে নেটিভ কোড ব্যবহার করে আপনাকে অন্য কোনও চালাক কাজের পরিমাণের তুলনায় ততটুকু কিনবে না। যদি পরে থাকে তবে আপনি ধীর গতি সন্ধান করতে পারেন এবং নীচের আলোচিত আরও ভাল অ্যালগরিদম, বা সম্ভবত শঙ্কিত বা অন্য কোনও বিকল্প দিয়ে এটি আরও দ্রুত তৈরি করতে চাইতে পারেন।

py2exe আসলে আপনার কোডটি স্থানীয় x86 / x64 তে সংকলন করে না , এটি কেবলমাত্র একটি এক্সিকিউটেবল সরবরাহ করে যা আপনার স্ক্রিপ্টকে বাইটকোড হিসাবে এম্বেড করে এবং সিস্টেমে পাইথন ছাড়াই ব্যবহারকারীদের কাছে বিতরণ করার বেশিরভাগ বহনযোগ্য উপায় সরবরাহ করে। আরকিগিসিপিটিং বান্ডিল করার চেষ্টা করার সময় এটি ব্যর্থ হয়েছিল, যার কারণে এটি কার্যকর হয়নি। আসলে পাইপেক্স এক্সক্লুসিভ করা এখনও পারফরম্যান্স অনুযায়ী কোনও কাজ করবে না।

আমি খুব দৃ strongly়ভাবে আপনাকে পরামর্শ দিচ্ছি যে আপনি প্রথমে ধীর বিটগুলি সনাক্ত করতে এবং সেখান থেকে অনুকূলিত করতে একটি প্রোফাইলার ব্যবহার করুন। পাইথনের একটি খুব ভাল সেট নির্মিত হয়েছে , সিপ্রোফিলটিকে আরও দ্রুত তৈরি করার জন্য সম্ভাব্য স্থানগুলি খুঁজে পেতে দীর্ঘমেয়াদে ব্যবহার করুন। সেখান থেকে কাস্টম সি মধ্যে বিভাগে দূরে নিখুত করতে পারেন অথবা সম্ভবত হিসাবে ক্ষুদ্র অংশ নিয়ে পরীক্ষা Cython .pyx মডিউল।

আপনি সম্ভবত পাইথন স্ক্রিপ্টটিকে একটি নেটিভ কোড এক্সটেনশন মডিউল হিসাবে তৈরি করার জন্য সাইথন সন্ধান করতে পারেন তবে সাইকো আপনাকে প্রবেশের ক্ষেত্রে কম বাধা দিয়ে পারফরম্যান্স বাড়িয়ে দিতে পারে।


4

স্ক্রিপ্ট সংস্করণের তুলনায় আরকটুলবক্সের মানক সরঞ্জামগুলি থেকে চালিত হলে ওয়াটারশেড ডিলিনেশন কতক্ষণ সময় নিতে পারে? সময়গুলি যদি একই রকম হয় তবে আমার সন্দেহ হয় যে কোনও উন্নতি হবে না। আপনি আর্কম্যাপের ব্যাকগ্রাউন্ডে দীর্ঘ প্রক্রিয়াগুলি চালনা বিবেচনা করতে চাইতে পারেন।


আমি আমার আসল প্রশ্নটি পরিষ্কার করে দিয়েছি এবং এখনও একটি সত্যিকারের হ্যাঁ / কোনও উত্তর পাওয়ার আশা করছি না কেন এই কোডটি সংকলন করা সম্ভব কারণ এই উত্তরটি আমার প্রশ্নের উত্তর দেয় না।
তুরস্কগোল্ড

2
@ তুরকিশ এটি আপনার প্রশ্নের সরাসরি উত্তর নাও দিতে পারে তবে এটি একটি দুর্দান্ত পরামর্শ। আপনার প্রক্রিয়াটি পুরো সময়টি চিত্রায়নের জন্য ব্যয় করার সম্ভাবনাগুলি ভাল, সুতরাং কোডটি টুইট করার কোনও পরিমাণ প্রশংসনীয়ভাবে সহায়তা করবে না। যাইহোক, অ্যালগরিদম পুনর্বিবেচনা একটি বিশাল পার্থক্য করতে পারে। সুতরাং আপনি প্রথমে যে কাজটি করতে চান তা হ'ল এই সংকলন পদ্ধতির সাথে আপনি নিজের সময়টি নষ্ট করছেন কিনা তা দেখার জন্য বর্তমান প্রয়োগের প্রোফাইল।
whuber

1
আমি @ ড্যান এবং @ ভুবার সাথে একমত আমি মনে করি একটি গভীর বিশ্লেষণ (অর্থাত্ বেঞ্চমার্কিং এবং প্রোফাইলিং) করা পারফরম্যান্সের উন্নতির জন্য কেবলমাত্র একটি দৃ .় শক্তি প্রয়োগের সমস্ত পদ্ধতির সংকলন করার চেয়ে আরও ভাল অন্তর্দৃষ্টি অর্জন করবে।
জেসন শায়িয়ার

4

সঙ্গত কারণ ব্যতীত কোনও ব্যক্তিগত জিওডাটাবেস ব্যবহার করবেন না। আমাদের অভিজ্ঞতায় তারা অন্যান্য সমস্ত ধরণের এসরি ডেটা স্টোরেজ ( রেফ ) এর চেয়ে ধারাবাহিকভাবে অনেক ধীর গতিতে থাকে । যদিও আমি জিআইএস.তে এখানে একটি প্রতিবেদন পড়েছি যা ফাইল জিডিবি চেয়ে দ্রুত ব্যক্তিগত দেখেছে।

যখন ওয়ার্কফ্লো অনেক ছোট পুনরাবৃত্তির সমন্বয়ে জিওপ্রোসেসর তৈরি করতে এবং একটি লাইসেন্স পরীক্ষা করার কলটি প্রায়শই পাইথন ব্যবহারের সবচেয়ে ব্যয়বহুল অংশ। সুতরাং আপনি সামনের দিকে বা পিছনে gp = ...(বা import arcpyভি 10 তে) যতটুকু পারেন তা করা একটি কৌশল যা আমি অনেক বেশি ব্যবহার করি।

সংকলনের বিষয়ে, এই উদ্ধৃতিটি সেরা বলেছে:

এটি লক্ষ্য করার মতো যে একটি সংকলিত [অজগর] স্ক্রিপ্টটি চালনার সময় একটি দ্রুত প্রারম্ভিক সময় হয় (কারণ এটি সংকলনের প্রয়োজন হয় না), এটি কোনও দ্রুত চালায় না ।

মার্ক সিডারহোলমের শাইপোকপি অপারেশন সম্পর্কিত কয়েকটি পরিসংখ্যান সহ পাইথনের আরকোবজেক্টগুলি ব্যবহার করার বিষয়ে একটি উপস্থাপনা রয়েছে (স্লাইড # 4)। পাইথন খুব ভাল ন্যায্য নয়, সি ++ (ভিবিএ 92%, ভিবি ও সি # 48% এ) অর্জন করা যায় তার 32% হারে চালাচ্ছে। খুব তাড়াতাড়ি দৌড়াতে এবং চিৎকার করতে যাবেন না, অনেকগুলি জিওপ্রসেসিং সরঞ্জাম হ'ল যেকোন উপায়ে পাইথন স্ক্রিপ্ট (অনুসন্ধান সি: \ প্রোগ্রাম ফাইলগুলি c আর্কগিস '' * .পি 'এর জন্য)।

যেমনটি অন্যান্য জায়গাগুলিতে অনেকে বলেছে, অজগরের সাথে সি বা সি ++ কোর ফাংশন সংকলন করে বা লেখার মাধ্যমে পারফরম্যান্সকে অনুকূল করার চেষ্টা করা সময়টি রানটাইমের সময় যে কোনও প্রকৃত পারফরম্যান্স লাভ (সম্ভবত) বামন করে। অনেকে বলে পাইথনের প্রধান উপকারটি বিকাশকারীদের সময়কে অনুকূলকরণ এবং উন্নত করছে ; মানুষের মনোযোগ মেশিন প্রক্রিয়াকরণের সময়ের চেয়ে অনেক বেশি মূল্যবান এবং ব্যয়বহুল।


1
হ্যাঁ সমস্ত গণনা। আমার অর্থের জন্য বিকাশকারী সময়ের সর্বোত্তম ব্যবহার হ'ল পাইথন, বেঞ্চমার্কের প্রোটোটাইপ *, বাধাগুলি অনুকূল করতে সি / সি ++ এ নেমে যান। * আমি প্রোটোটাইপ বলি, কিন্তু আমি জানি যে 'প্রোটোটাইপ' এটি উত্পাদন করতে চলেছে of
জেসন শিয়েরার

পাইথনের আরকোবজেক্টসের লিঙ্কগুলির জন্য দুর্দান্ত মন্তব্য এবং ধন্যবাদ। আমি মনে করি একটি জিডিবিতে লেখার জন্য ডেটা ম্যানেজমেন্ট দৃষ্টিকোণ বনাম শেফফিলের সুবিধা (শেফফাইলে বৈশিষ্ট্য সারণী নিষেধাজ্ঞাগুলি বনাম বৈশিষ্ট্য শ্রেণি, জ্যামিতির উপস্থাপনা, সামগ্রিক ডেটা ম্যানেজমেন্ট অনুশীলন ইত্যাদি) পাশাপাশি যে জিনিসগুলিতে আপনি আরও সহজ এবং পরিষ্কার করতে পারেন সেগুলি থেকে সুবিধা রয়েছে একটি অ্যাক্সেস পরিবেশ বনাম ডিবিএফ ফাইলগুলির সাথে ডিল করে dealing সুতরাং, মূলত আপনি কী করছেন এবং আউটপুট ডেটার সাথে আপনি কী করতে যাচ্ছেন তা নিয়ে একটি ব্যয়-বেনিফিট বাণিজ্য off জিডিবির বাইরের রেস্টারদের মাঝের মাঠ এবং জিডিবিতে থাকা সমস্ত কিছু কাজ করছে বলে মনে হচ্ছে।
তুর্কিগোল্ড

1

আপনি অজগর কোডটি মেশিন কোডে সংকলন করতে পারবেন না। এটি যখন প্রথমবার চলবে, তখন এটি 'বাইটোকোড', একটি মধ্যবর্তী ভাষা (যা পাইক ফাইল তৈরি করে) এর সাথে সংকলন করে

py2exe দোভাষী এবং প্রয়োজনীয় পাইথন ফাইলগুলি / বহিরাগত ফাইলগুলিকে একটি এক্সিকিউটেবলের জন্য প্রয়োজনীয় dll ফাইলগুলি মোড় করে। এটি সংকলিত নয় - রানটাইমটি খুব আলাদা হওয়া উচিত নয়।

বিভিন্ন প্রযুক্তির সংমিশ্রণ করে পাইথন কোডটি খুব দ্রুত চালানো সম্ভব।

আপনার প্রথমটি যা করা উচিত তা হ'ল বাধাগুলি খুঁজে পেতে আপনার কোডটিকে প্রোফাইল করা। একবার পাওয়া গেলে, আমি সাধারণত এই প্রক্রিয়াটি ব্যবহার করি:

  • নম্পি অ্যারে বা মানচিত্র () ফাংশন ব্যবহার করে 'for' লুপগুলি দূর করুন। এটি মূলত লুপকে সিতে ঠেলে দেয়
  • অ্যালগরিদমের আরও ভাল বাস্তবায়ন তদন্ত করুন (এই ধরণের উপরের সাথে একই সাথে চলে)। আই / ও ক্রিয়াকলাপের সংখ্যা হ্রাস করার মতো স্টাফ, সংযুক্ত ব্লকগুলিতে ডেটা অ্যাক্সেস / সঞ্চিত রয়েছে তা নিশ্চিত করে।
  • ইন্টারপ্রেটারের 'কৌশল' যেমন লুপগুলির মধ্যে ব্যয়বহুল চেহারাগুলি এড়ানো, 'যদি' লুপের মধ্যে ব্লক থাকে (পরিবর্তে 'চেষ্টা করুন' ব্যবহার করুন)
  • আবার এটি প্রোফাইল
  • যদি এটি এখনও খুব ধীর হয় তবে সিথনের সাহায্যে সিটিতে জটিল অংশগুলি ঠেলে দেখুন (বা সরাসরি সিতে লিখুন, একটি ডেল তৈরি করুন এবং এটি কল করার জন্য সিটিপস ব্যবহার করুন)
  • আবার প্রোফাইল
  • যদি এখনও খুব ধীর হয় তবে সমান্তরাল বা জিপিইউ কম্পিউটিং (মাল্টিপ্রসেসিং লাইব্রেরি, পাইকুডিএ, প্যারালাল পাইথন ইত্যাদি) দেখুন

0

আপনি যদি অন্য কোনও স্থান থেকে পাইথন স্ক্রিপ্ট আমদানি করেন তবে এটি একটি .pyc ফাইল তৈরি করে। সুতরাং, সংকলনের ফলে কোনও পার্থক্য হয় কিনা তা পরীক্ষার একটি সহজ উপায় হ'ল আপনার স্ক্রিপ্টটিকে কোনও ফাংশনে রূপান্তর করা (যেমন মেইন ())। আপনি যদি সেই স্ক্রিপ্টটি সে হিসাবে সংরক্ষণ করেন example.pyতবে নিম্নলিখিত লাইনগুলির সাথে অন্য একটি ফাইল তৈরি করুন:

import example
example.main() # call your script(s)

আপনি যদি স্ক্রিপ্টের মধ্যে থেকে চলতে এবং এটি যখন আমদানি করা হয় তখন দৌড়ানোর সময়, পার্থক্য কী তা সম্ভবত আপনি দেখতে পারেন। এটি যদিও এটি করার একটি স্বল্প প্রযুক্তি way

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.